Nginx 中 location 和 proxy_pass 的斜杠问题

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 的斜杠问题_第1张图片

        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 的斜杠问题_第2张图片

后端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 的斜杠问题_第3张图片

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

Nginx 中 location 和 proxy_pass 的斜杠问题_第4张图片

 

 

 经常出错的也正是这种带 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。

你可能感兴趣的:(Nginx,nginx)