nginx proxy_pass详解
最近在使用nginx时遇到一个奇怪的问题,我想将以
/api
开头的请求代理到
http:127.0.0.1/8080/xxxapi
下,所以我在nginx中做了如下配置:
location /api {
proxy_pass http://127.0.0.1:8080/xxxapi/;
}
然后我请求http://127.0.0.1/xxxapi/xxxx
直接给我报了404,好家伙,直接给我整蒙了,F12
查看请求,发现请求变成了http://127.0.0.1/api//xxxx
,于是就有了这篇文章。
废话不多说,为什么会变成这样呢?查阅了nginx官网以及一些其它资料后发现,这是nginx的转发规则导致的,这里以访问http://127.0.0.1/api/abc
为例列出一些常见的情形:
序号 | location | proxy_pass | 代理url |
---|---|---|---|
1 | /api/ | http://127.0.0.1:8080/ | http://127.0.0.1:8080/abc |
2 | /api/ | http://127.0.0.1:8080 | http://127.0.0.1:8080/api/abc |
3 | /api/ | http://127.0.0.1:8080/xxxapi/ | http://127.0.0.1:8080/xxxapi/abc |
4 | /api/ | http://127.0.0.1:8080/xxxapi | http://127.0.0.1:8080/xxxapiabc |
5 | /api | http://127.0.0.1:8080/ | http://127.0.0.1:8080//abc |
6 | /api | http://127.0.0.1:8080 | http://127.0.0.1:8080/api/abc |
因此,根据实际情况,一般使用第3
种或者第6
种写法,特此记录,以供参考!