nginx多层代理不加斜杠访问的问题
摘要:在一个项目中发现,项目经过nginx多层代理后,如果不加斜杠访问会自动加上端口号导致无法访问。这种场景网上资料很少,经过笔者自己一番折腾和探索,整理出两种可行方案。
场景
外网服务器跟内网服务器都装有nginx,现需要通过外网服务器的nginx为内网的一个项目配置一个外网访问地址
已有外网地址,例如:www.caogenjava.com
已有内网地址,例如:192.168.1.10:8080/blog
期望可以通过www.caogenjava.com/blog访问到内网项目
外网nginx配置
location /blog { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.1.10:8080/blog; }
实际情况
带斜杠访问www.caogenjava.com/blog/正常
不带斜杠访问www.caogenjava.com/blog会跳转至www.caogenjava.com:8080/blog/导致无法访问
度娘折腾
相关资料很少,只找到一篇类似帖子,方案是设置port_in_redirect为off,但是经过测试,方案无效。于是自己折腾,发现两种方案。
方案一:调整外网nginx配置
location /blog/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.1.10:8080/blog/; }
就是location后面跟proxy_pass后面的项目都跟着斜杠,这个方案可行有个前提条件:就是外网的访问协议跟内网的访问协议必须一致,即都是http或者都是https。很遗憾,我们的项目外网是https,内网是http,此方案对我们来说不可行。看方案二。
方案二:调整内网nginx配置
location /blog { rewrite ^/(.*) http://www.caogenjava.com/blog/; } location /blog/ { proxy_pass http://127.0.0.1:8001/blog/; }
看到这个配置,大家应该明白是什么意思了吧,思路就是:如果你不带斜杠访问,我就强行重定向到带斜杠访问的外网地址上。经过测试,完美解决。
注意事项
调整了nginx配置,请马上清理浏览器缓存,否则看不到效果。
本文使用的nginx版本为当前最新稳定版1.20.1,其他版本未做测试。
你所使用的容器也会有影响,例如方案二,在tomcat容器下正常,在Jetty容器下经过简单测试发现不适用。
除非注明,文章均为草根java原创,转载请注明本文地址:
https://www.caogenjava.com/detail/119.html
上一篇:Druid连接池之removeAbandoned is true, not use in production
下一篇:centos8安装中文环境的正确姿势
相关链接
-
1微信开发errcode:45015,errmsg:response out of time limit之完美解决
-
2archive is not a ZIP archive之解决
-
3火狐每次启动都弹出迅雷提示下载openh264之解决
-
4Eclipse中提示Could not find the main class之解决
-
5以小米6为例图说安卓手机如何安装谷歌四件套
-
6在微信中调用外部浏览器实现文件下载之解决
-
7java web项目代码不报错但是项目左上角有个红叉之解决
-
8Eclipse中svn资源库中文路径乱码解决
-
9万能方法用指定浏览器打开桌面上的网页快捷方式
-
10论坛注册:用户名包含被系统屏蔽的字符之完美解决
热门排行榜
-
1微信开发errcode:45015,errmsg:response out of time limit之完美解决
-
2archive is not a ZIP archive之解决
-
3火狐每次启动都弹出迅雷提示下载openh264之解决
-
4Eclipse中提示Could not find the main class之解决
-
5XML document structures must start and end within the same entity报错解决
-
6以小米6为例图说安卓手机如何安装谷歌四件套
-
7在微信中调用外部浏览器实现文件下载之解决
-
8U盘安装CentOS 7终极方案,简单有效
-
9POI合并单元格时CellRangeAddress类提示过时之解决
-
10java web项目代码不报错但是项目左上角有个红叉之解决