当前位置: 代码网 > 服务器>服务器>Nginx > nginx反向代理如何支持网址自动添加斜线

nginx反向代理如何支持网址自动添加斜线

2024年05月26日 Nginx 我要评论
一、背景我们在访问nginx代理下的项目前端页面时当请求url后面没有 /nginx目录中如果没有对应的文件就会自动进行 301 并加上 /二、问题通过lua+nginx进行proxy_pass+up

一、背景

我们在访问nginx代理下的项目前端页面时

当请求url后面没有 / 

nginx目录中如果没有对应的文件

就会自动进行 301 并加上 / 

二、问题

通过lua+nginx进行proxy_pass+upstream负载后,带二级目录的页面访问路径出错,无法解析。

例如访问 https://xxx.com.cn/admin (未带/ ) 时会跳转至 http://safes-normal:8092/admin/ ,301后的地址出错。

原有配置如下:

三、解决方案

第一步:解决重定向域名问题

在location处添加

proxy_set_header host h o s t : host: host:proxy_port;
proxy_set_header x-forwarded-for $remote_addr;

例如

原因:

当url 指向一个目录并且在最后没有包含“/”时,nginx 内部会自动的做一个 301 重定向,由于我们的nginx中的server_name_in_redirect 值为 off ,故url 重定向为: 原 url 中的域名 + 目录名 + /。

而我们没设置proxy_set_header host 时,浏览器直接访问 nginx,获取到的 host 是 proxy_pass 后面的值,即 safes-normal。

故浏览器跳转成了 http://safes-normal:8092/admin/。

当我们设置了proxy_set_header host h o s t : host: host:proxy_port后,再访问 https://xxx.com.cn/admin ,此时会发现浏览器会301至https://xxx.com.cn:8092/admin/,这样也会导致访问失败,因为我们希望得到的结果是:

https://xxx.com.cn/admin 重定向为 https://xxx.com.cn/admin/

第二步:解决重定向后的端口问题

查阅资料发现nginx中有 port_in_redirect 配置

如果port_in_redirect为off 时,那么始终按照默认的端口;如果该指令打开,那么将会返回当前正在监听的端口。

由于port_in_redirect默认为on,所以导致我们重定向的时候,带了server中的端口8092,如果希望nginx在301重定向时不带端口,设置port_in_redirect为off 即可

修改配置:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com