Nginx反向代理无尾部斜杠路径跳转暴露端口82故障解决求助
问题根因
后端Nginx在接收不带尾部斜杠的目录请求时,默认会返回301重定向自动追加斜杠,但后端服务监听82内网端口,无法感知前端反向代理的HTTPS协议、公网域名信息,所以重定向地址错误拼接了内网端口和HTTP协议,导致用户跳转到无法访问的地址。
解决方案
方案1:修改后端Nginx配置(推荐,改动量最小)
直接调整后端Nginx的重定向规则,避免拼接错误的端口和协议:
server { listen 82; root /var/www/xxxx.com/_site; index index.htm index.html; # 新增以下2行配置,关闭绝对路径重定向 absolute_redirect off; server_name_in_redirect off; # 把原location匹配规则的尾部斜杠去掉,兼容带/和不带/的请求 location /privacy { index index.html; try_files $uri $uri/ =404; } }
修改完成后执行nginx -t检查配置语法,确认无误后执行nginx -s reload重载配置即可生效。此时访问不带斜杠的/privacy会返回相对路径的重定向,直接沿用用户当前访问的HTTPS公网域名,不会携带82端口。
方案2:修改前端反向代理配置
如果不想改动后端服务,也可以在前端Nginx反向代理层修正后端返回的重定向地址:
location / { # limit_req zone=MYZONE burst=100 nodelay; proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://xxxxx:82; # 新增以下配置,自动替换重定向地址的错误前缀 proxy_redirect http://xxxxx:82/ $scheme://$host/; }
同样检查配置语法无误后重载Nginx即可生效。
内容的提问来源于stack exchange,提问作者Ezols
相关产品推荐
相关产品推荐

