nginx 配置斜杠解析
很多人在配置nginx的时候对location,proxy_pass带不带斜杠犹豫不决,今天这篇文章带你理解nginx该如何配置location和proxy_pass斜杠问题。
location /test {
proxy_pass http://192.168.1.55/var/;
}
假设现有两台nginx服务器
nginx A: 192.168.1.55
nginx B: 192.168.1.56
浏览器访问 http://192.168.1.55/test/api
下表是我对nginx A中配置不同的规则,请求nginx A,观察nginxB到结论。
重点对proxy_pass进行分析,可以分为3种形式:
1.http://ip:port
2.http://ip:port/
3.http://ip:port/xxx
按照ip:port后是否接了字符串归为2类,"/"也是字符串,因此1归为a类,2、3归为b类
a类后未接字符串的时候,nginx 会将原请求路径原封不动地转交给下一站 nginx
b类后接了字符串的时候,nginx 会将 location 从 原请求路径 中剔除,再将剩余的字符串拼接到 proxy_pass 后生成 新请求路径,然后将 新请求路径 转交给下一站nginx
举例解析:
案例6:proxy_pass 的 ip:port 后接了字符串 "/var/",因此将 location:"/test" 从 原请求路径 "/test/api" 中剔除,变为 "/api",再将 "/api" 拼接到proxy_pass:http://192.168.1.56/var/ 后生成了 新请求路径:"http://192.168.1.56/var//api",因此下一站的nginx收到的请求就是 /var//api。
公式:/var/+(/test/api -/test)=/var//api
案例7。proxy_pass 的 ip:port 后接了字符串 "/var",因此将 location:"/test/" 从 原请求路径:"/test/api" 中剔除,变为"api",再将"api"拼接到proxy_pass:http://192.168.1.56/var 后生成了新请求url:"http://192.168.1.56/varapi",因此下一站的nginx收到的请求就是 "/varapi"。
公式:/var+(/test/api -/test/)=/varapi