场景:
服务器上81和82端口部署了两个网站,想通过listen 80端口,实现 ip/参数,来转发到不同的端口
本想添加个二级域名隐性URL转发直接解决,但是,发现url转发达到上限,不得不另寻办法;
一开始使用了location /参数
server { #省略其他配置 listen 80; location /one{ proxy_pass http://location:81
} location /tow{ proxy_pass http://location:82
}
}
但是这样写的话,问题就来了
此时如果我们访问:localhost/one ,并不会转发到 location:81这个地址,而是location:81/one ,此时就会404了,因为我81端口的网站没有 one这个目录或接口方法
因为 proxy_pass 后面的地址尾部没有加 / ,那么就会把location后的 参数带过去,但是加了 / 又会有问题,会变成绝对路径,这样的话,网站的 静态文件(js/css等等)路径 可能会出现问题
最后终于找到了一个办法,使用 rewrite(可以实现对url的重写,以及重定向)
server { #省略其他配置 listen 80; location /one{ rewrite ^/(.*) http://服务器ip or 域名:81;
} location /tow{ rewrite ^/(.*) http://服务器ip or 域名:82;
}
}
这样的话,访问:localhost/one ,就会重定向到 http://服务器ip/域名:81;
rewrite后面的部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址(必加)
以上就是nginx location的踩坑