USEGEAR

导航

学习unigui【37】nginx的反向代理 ,程序中的重新定向

默认port:9077

希望IP:81后访问9077。于是就采用nginx。
问题当点击下载文件或浏览文件等时,怎么知道用户是通过81口访问的?

UniGUI 没有暴露 RequestHeader(s),继续走“读头部”的路只会踩坑。最稳妥的做法是:别拼绝对 URL,直接用“根相对路径”,让浏览器自己用当前的 scheme + host + port(也就是 Nginx 对外的 81 或 443)去打开,这样完全不依赖服务端获取端口。

pathfile := ExtractFileName(pathfile);

// 根相对路径(前面带 /),浏览器会自动用当前 origin(含端口) 访问
aUrl := '/' + UniFrmBase_knowledge_mgmt.officialDOC + '/' + HTTPEncode(pathfile);

// 更稳妥的 JS 拼接:用 QuotedStr 避免引号问题
UniSession.AddJS('window.open(' + QuotedStr(aUrl) + ');');

若你的应用发布在二级路径(例如 /app/

那就把前缀也加上:

const AppPrefix = '/app'; // 按你的 Nginx 反代前缀填写,若无就留空或删掉
aUrl := AppPrefix + '/' + UniFrmBase_knowledge_mgmt.officialDOC + '/' + HTTPEncode(pathfile);
UniSession.AddJS('window.open(' + QuotedStr(aUrl) + ');');
Nginx 侧的配合(提醒)

确保 Nginx 对 /aDir/(或你实际的 officialDOC 路径)有 location/反代/别名映射到后端能读文件的位置。例如:

location /aDir/ {
    proxy_pass http://127.0.0.1:9077/aDir/;  # 或者 root/alias 到静态目录
    # 其他头按你现有配置即可
}

为什么这招更稳

  • 不依赖 UniGUI 版本差异(根本不读取任何请求头 API)。

  • 自动跟随浏览器的 origin(含端口 81 / 443 / 自定义端口),天然适配反向代理。

  • 你以后换成 HTTPS 或端口变更,代码都不用改。

posted on 2025-10-07 08:31  USEGEAR  阅读(71)  评论(0)    收藏  举报