【已完成】开源作者遇到反向代理的问题,有一些建议
宝塔的项目人员你们好,我是开源项目 zfile 的作者,有很多用户在使用宝塔的过程中遇到一些问题。关于反向代理配置,为什么默认为 `proxy_set_header Host 127.0.0.1:$server_port;`。
程序经过反向代理后,无法直接拿到客户请求的原始地址(请求头中的 Host),所以一般会通过反向代理将用户请求的 Host 请求头转发给后端程序,按照现在宝塔的默认配置,项目获取到的 Host 请求头始终是 127.0.0.1。而且这个应该是宝塔后面修改成这样了,我之前用老版本宝塔还是默认 $host,请问改成现在这样有什么原因,为什么不使用更通用的 $host(其他反代工具、CDN 加速等默认行为都是这个),虽然用户能手动修改发送域名,但是还是希望能还原默认值到 $host,或者为了兼容非标准端口访问的话,可以改为 $host:$server_port;
还有个就是希望增加 `proxy_set_header X-Forwarded-Proto $scheme;` 这个配置。
同理,经过反向代理后,后端程序无法知道用户通过 http 还是 https 协议访问的, 这行配置的作用是反向代理工具将用户请求的协议告诉后端,如果不添加的话,只能当做 http 处理,如一个短链处理程序,接收到 https://xxx.com/s/qw1a请求,需要重定向到实际地址,可后端只知道路径 /a/b/c/file.name,协议需要从 X-Forwarded-Proto 获取,没有就只能默认 http,用户请求域名需要从 proxy_set_header 获取地址,拼接起来。预期应该是 https://xxx.com/a/b/c/file.name,可实际会跳转到 http://xxx.com/a/b/c/file.name,现代浏览器有安全限制,一般不允许 https 站点跳转至 http 协议,会提示不安全。
被自动转义成表情了,补充:
proxy_set_header Host 127.0.0.1:$server_port;
proxy_set_header Host $host:$server_port; 奇怪的是宝塔后台 "网站" -> "反向代理" 目标地址写 "http://127.0.0.1:9090" 这种地址,能自动检测到,填充为 $http_host,这个也可以,算比较正常的行为。而且也包含 X-Forwarded-Proto。
能不能这些都统一下,参考你们自带的"网站" -> "反向代理"模块 又验证了下,1panel,nginx proxy manager,traefik 都是正常的 上面说的反代是哪个位置的,docker的吗 阿珂 发表于 2025-7-14 11:05
上面说的反代是哪个位置的,docker的吗
左侧导航:网站 -> PHP 项目 -> 添加是填写域名 -> 详情左侧菜单配置反代,或网站 -> 其他项目 -> 添加时填写域名。
详见:https://docs.zfile.vip/question/nginx-proxy-config 阿珂 发表于 2025-7-14 11:05
上面说的反代是哪个位置的,docker的吗
"网站" -> "PHP 项目" -> "项目详情" -> "添加反向代理"
和
"网站" -> "其他项目" -> "项目详情" -> "配置文件" yfzz 发表于 2025-7-14 20:11
"网站" -> "PHP 项目" -> "项目详情" -> "添加反向代理"
和
"网站" -> "其他项目" -> "项目详情" -> " ...
是因为什么要在这里创建反代呢
docker应用的话,直接在docker-网站那里
或者网站---反向代理那边创建
php反代和其他项目这些反代因为不同场景设计是不一样的 阿珂 发表于 2025-7-15 14:39
是因为什么要在这里创建反代呢
docker应用的话,直接在docker-网站那里
或者网站---反向代理那边创建
1. 使用 PHP 反代这个是因为早期版本没有专门的反代模块,也没有 Docker 功能,只能建个空的 PHP 项目添加反代。
2. 其他项目这个使用场景是运行指定命令启动,填写了域名,自动就在这个模块添加了反代。这个还挺常用的,对于直接运行在宿主机的程序来说。
您说的 "因为不同场景设计是不一样的" 方面展开讲讲嘛,为什么设计成 proxy_set_header Host 127.0.0.1:$server_port; 对这个有点不解。 阿珂 发表于 2025-7-15 14:39
是因为什么要在这里创建反代呢
docker应用的话,直接在docker-网站那里
或者网站---反向代理那边创建
您说的,网站---反向代理是新加的功能,老版本没有,用户习惯了在默认的 PHP 模块或其他模块反代。 感谢反馈,后面我们会考虑统一
不过旧版本的话也无法使用的
新的目前建议是直接用网站--反向代理 阿珂 发表于 2025-7-16 15:14
感谢反馈,后面我们会考虑统一
不过旧版本的话也无法使用的
新的目前建议是直接用网站--反向代理 ...
旧版本没事,只要之后可以统一就行。 yfzz 发表于 2025-7-16 20:56
旧版本没事,只要之后可以统一就行。
后面会考虑的,感谢反馈
页:
[1]