各位大佬 ,最近在处理一个 nginx 的反代的问题,一直没有搞定,想请教一下大家
我的 nginx 在布署在路由器后面,由于国情,443, 80 端口不能使用,所以在路由防火墙上做了端口转发。比如:
1443-->443,走 https
我证书都全部配置好了。外网用 https://www.domain.com:1443 也可以正常访问。 这时我需要反代我另一个容器 heimdall 的网页,比如: https://192.168.1.1 , nginx 的 config 也做好了。但目前遇到的问题网页的部分内容反代成功,但其它的部分不成功。不成功的原因是反代后端口 1443 丢失。 比如: https://www.domain.com:1443/css/的路径变成了 https://www.domain.com/css,缺少了端口号,这样网页里有部分内容不能加载。
查了一下 google,可能原因是要设置 proxy header, 我试了很多方法,比如添加:
proxy_set_header Host $http_host;
或
proxy_set_header Host www.domain.com:1443; 都一样,不能解决。
请指教 ps:只有防火墙对外的端口是非标准的 1443,之后的所有端口都是 443.
1
AoEiuV020CN 2022-07-13 10:57:29 +08:00
没明白,建议把 nginx 配置贴出来看看,
不过我感觉不是 nginx 问题,会不会是网页代码问题,压根就没请求到正确的资源,请求的资源地址压根就和网页地址不是一个服务器和端口, |
2
AoEiuV020CN 2022-07-13 11:00:27 +08:00
@AoEiuV020CN #1 比如你现在网站首页地址是 https://www.domain.com:1443 但是网站应用认为首页地址是 https://www.domain.com 于是请求的资源地址都是使用后者拼接的,就丢失了端口号,
这种问题在现代 web 框架好像挺常见的,看看网站应用源码有没指定首页地址啥的功能, |
3
adoal 2022-07-13 11:17:33 +08:00
被反代的业务网站必须具备“意识到自己是在反代后面所以要从反代传来的 header 或者配置文件确定自己的域名、端口和协议”的能力才行啊。这个大部分框架都支持,但是默认不一定开启,还是得看框架的文档来配置。
|
4
wzm5201314 2022-07-13 17:35:02 +08:00
你这种可以在服务中配置
location /static/ { proxy_pass http://host:8084/static/; } 通过这种方式把静态资源给重定向到指定的端口去访问就可以了 |
5
afmore2021 OP @adoal 谢谢大佬,应是应用(容器)代码问题。通过修改容器中的一个配置文件来强行指定了 URL 及端口,目前可以临时用了。
|