Rootop 服务器运维与web架构

nginx反向代理proxy_pass中带/和不带/的区别

文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

环境:
192.168.31.36 nginx反向代理
192.168.31.37 nginx,默认首页为index.html

通过浏览器访问:http://www.test.com/test/index.html 测试

情况一、
proxy_pass中不包含URI地址,那么location后的地址会传递给后端。
1、

location /test
{
	proxy_pass http://192.168.31.37;
}

因为后端没有test目录,所以访问结果为 404(后端日志 “GET /test/index.html HTTP/1.0” 404)

2、

location /test/   # location中以/结尾
{
	proxy_pass http://192.168.31.37;
}

因为后端没有test目录,所以访问结果为 404(后端日志 “GET /test/index.html HTTP/1.0” 404)

情况二、
proxy_pass中指定了符合URI规范的地址,那么location后面匹配的地址字符被替换为proxy_pass中URI的地址字符
3、

location /test
{
    proxy_pass http://192.168.31.37/;
}

proxy_pass中的/替换为/test,实际访问 http://192.168.31.37//index.html,所以访问成功(后端日志 “GET //index.html HTTP/1.0” 200)
实际访问地址里出现//的原因是访问
/test/index.html 时,proxy_pass后面的/替换为/test,变成
//index.html
所以日志里也会看到两个//。

4、

location /test/
{
	proxy_pass http://192.168.31.37/;
}

访问成功(后端日志 “GET /index.html HTTP/1.0” 200)
/ 替换 /test/ 后就变为 /index.html ,所以日志里只出现一个 /

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4998.html

作者:Venus

服务器运维与性能优化

评论已关闭。