Nginx 中 location 和 proxy_pass 的斜杠问题
  mJ3y71vHJ0RC 2023年11月02日 42 0


location 的斜杠问题比较好理解,不带斜杠的是模糊匹配。例如:

location /doc

  • 可以匹配 /doc/index.html,也可以匹配 /docs/index.html。

location /doc/

  • 只能匹配 /doc/index.html,不能匹配 /docs/index.html。

  对于 proxy_pass 的斜杠问题,得结合 location 来讲。 

 

 

proxy_pass 不带URL方式


这种 IP、端口后面没有 /,是不带 URI 的方式,nginx 会保留 location 中的路径。所以,访问 http://127.0.0.1/docs/,实际上访问的是 http://127.0.0.1:8080/docs/。

location /docs/ {
    proxy_pass http://127.0.0.1:8080;
}

Nginx 中 location 和 proxy_pass 的斜杠问题_IP

location /jenkins/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080;
         }

tomcat日志
192.168.11.128 - - [04/Jun/2023:07:50:59 +0800] "GET /jenkins/index.html HTTP/1.0" 404 648

 

 

 

 proxy_pass 带 URI 的方式


这种 IP、端口后面有 /,是带 URI 的方式,nginx 将会使用别名的方式来对 URL 进行替换。所以,访问 http://127.0.0.1/docs/,实际上访问的是 http://127.0.0.1:8080/,/docs/ 替换成了 /。

location /docs/ {
    proxy_pass http://127.0.0.1:8080/;
}
location /article/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080/;
         }

Nginx 中 location 和 proxy_pass 的斜杠问题_斜杠_02

后端tomcat日志

192.168.11.128 - - [04/Jun/2023:08:08:56 +0800] "GET /index.html HTTP/1.0" 404 648

 对带 URI 的方式进行扩展:

location /article/ {
    proxy_pass http://127.0.0.1:8080/docs/;
}

这种同样 IP、端口后面有 /,也是带 URI 的方式。所以,访问 http://127.0.0.1/article/,实际上访问的是 http://127.0.0.1:8080/docs/,/article/ 替换成了 /docs/。 

 举例如下:

location /article/ {
            proxy_set_header host $host;
            proxy_pass http://192.168.11.128:8080/docs/;
         }

Nginx 中 location 和 proxy_pass 的斜杠问题_html_03

192.168.11.128 - - [04/Jun/2023:08:00:26 +0800] "GET /docs/index.html HTTP/1.0" 404 648

Nginx 中 location 和 proxy_pass 的斜杠问题_IP_04

 

 

 经常出错的也正是这种带 URI 方式的写法


例如:

location /article/ {
    proxy_pass http://127.0.0.1:8080/docs;
}

当访问 http://127.0.0.1/article/index.html 的时候,本意是想访问 http://127.0.0.1:8080/docs/index.html。但是,/article/ 替换成了 /docs,所以,实际访问的是 http://127.0.0.1:8080/docsindex.html。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  TZ5i7OqYsozK   2023年12月12日   46   0   0 IPredisIPredis
mJ3y71vHJ0RC