当Web服务器为Nginx时,若浏览器访问的uri最后不带斜杠,如http://www.xxx.com.cn/aaa,当aaa是一个目录时,就会产生301跳转,且自动将uri补全为http://www.xxx.com.cn/aaa/,在最后添加一个/。正常情况下,这个没有问题,浏览器会自动去访问http://www.xxx.com.cn/aaa/,而当前端存在Nginx反向代理时,就会存在一个坑,导致出错无法访问网页。
如果前端存在Nginx反向代理对外提供web代理服务,而真实的web服务器的端口可能不是80端口,假设为9000端口,则以上情况发生时,产生的301跳转的uri会变成http://www.xxx.com.cn:9000/aaa/,从而导致浏览器无法正确打开网页,要解决这个问题,需要在Nginx的配置文件中增加一个配置选项port_in_redirect off
配置示例:
server {
listen 9000;
port_in_redirect off;
....
这表示自动产生redirect的时候不要带端口,默认是打开的,因此就会出现以上的坑。在使用Nginx做反向代理时候,注意避坑。