nginx反向代理location和proxy_pass的映射关系
配置nginx反向代理时,总是需要尝试多次才能配置成功,通过本文做个记录,方便以后查看。
1. proxy_pass 只有主机地址时
只有主机地址的意思是,
proxy_pass
值为http://host:port
这种形式,url部分没有/
或/xxx
等.
对应到本文示例就是http://backend
。
这种情况下,相当于下面的公式:
backend url = proxy_pass + path
这种情况下,请求的 path 部分会直接追加到 proxy_pass 地址后,相当于把nginx地址一对一的映射到了后端地址,这种配置方式理解最简单。
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/ | http://backend | / | http://nginx/ | http://backend/ |
/ | http://backend | /hello | http://nginx/hello | http://backend/hello |
/ | http://backend | /hello/world | http://nginx/hello/world | http://backend/hello/world |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/a | http://backend | /a | http://nginx/a | http://backend/a |
/a | http://backend | /ab | http://nginx/ab | http://backend/ab |
/a | http://backend | /a/ | http://nginx/a/ | http://backend/a/ |
/a | http://backend | /a/b | http://nginx/a/b | http://backend/a/b |
/a | http://backend | /a/b/ | http://nginx/a/b/ | http://backend/a/b/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/b/ | http://backend | /b/ | http://nginx/b/ | http://backend/b/ |
/b/ | http://backend | /b/a | http://nginx/b/a | http://backend/b/a |
/b/ | http://backend | /b/a/ | http://nginx/b/a/ | http://backend/b/a/ |
2. proxy_pass 带路径时
这种情况下,相当于下面的公式:
backend url = proxy_pass + (path - location)
path 部分减去匹配的 location 部分后,剩余内容追加到 proxy_pass 上去请求。
如果不是为了 /u
去匹配 /uv
这种路径,使用 /v/
去匹配 /v/w
这种更准确,不会出现 //
这种情况。
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/u | http://backend/ | /u | http://nginx/u | http://backend/ |
/u | http://backend/ | /uv | http://nginx/uv | http://backend/v |
/u | http://backend/ | /u/ | http://nginx/u/ | http://backend// |
/u | http://backend/ | /u/v | http://nginx/u/v | http://backend//v |
/u | http://backend/ | /u/v/ | http://nginx/u/v/ | http://backend//v/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/v/ | http://backend/ | /v/ | http://nginx/v/ | http://backend/ |
/v/ | http://backend/ | /v/w | http://nginx/v/w | http://backend/w |
/v/ | http://backend/ | /v/w/ | http://nginx/v/w/ | http://backend/w/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/c | http://backend/c | /c | http://nginx/c | http://backend/c |
/c | http://backend/c | /cd | http://nginx/cd | http://backend/cd |
/c | http://backend/c | /c/ | http://nginx/c/ | http://backend/c/ |
/c | http://backend/c | /c/d | http://nginx/c/d | http://backend/c/d |
/c | http://backend/c | /c/d/ | http://nginx/c/d/ | http://backend/c/d/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/d/ | http://backend/d | /d/ | http://nginx/d/ | http://backend/d |
/d/ | http://backend/d | /d/e | http://nginx/d/e | http://backend/de |
/d/ | http://backend/d | /d/e/ | http://nginx/d/e/ | http://backend/de/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/e | http://backend/e/ | /e | http://nginx/e | http://backend/e/ |
/e | http://backend/e/ | /ef | http://nginx/ef | http://backend/e/f |
/e | http://backend/e/ | /e/ | http://nginx/e/ | http://backend/e// |
/e | http://backend/e/ | /e/f | http://nginx/e/f | http://backend/e//f |
/e | http://backend/e/ | /e/f/ | http://nginx/e/f/ | http://backend/e//f/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/f/ | http://backend/f/ | /f/ | http://nginx/f/ | http://backend/f/ |
/f/ | http://backend/f/ | /f/g | http://nginx/f/g | http://backend/f/g |
/f/ | http://backend/f/ | /f/g/ | http://nginx/f/g/ | http://backend/f/g/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/g | http://backend/m | /g | http://nginx/g | http://backend/m |
/g | http://backend/m | /gh | http://nginx/gh | http://backend/mh |
/g | http://backend/m | /g/ | http://nginx/g/ | http://backend/m/ |
/g | http://backend/m | /g/h | http://nginx/g/h | http://backend/m/h |
/g | http://backend/m | /g/h/ | http://nginx/g/h/ | http://backend/m/h/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/h/ | http://backend/n | /h/ | http://nginx/h/ | http://backend/n |
/h/ | http://backend/n | /h/i | http://nginx/h/i | http://backend/ni |
/h/ | http://backend/n | /h/i/ | http://nginx/h/i/ | http://backend/ni/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/i | http://backend/x/ | /i | http://nginx/i | http://backend/x/ |
/i | http://backend/x/ | /ij | http://nginx/ij | http://backend/x/j |
/i | http://backend/x/ | /i/ | http://nginx/i/ | http://backend/x// |
/i | http://backend/x/ | /i/j | http://nginx/i/j | http://backend/x//j |
/i | http://backend/x/ | /i/j/ | http://nginx/i/j/ | http://backend/x//j/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/j/ | http://backend/y/ | /j/ | http://nginx/j/ | http://backend/y/ |
/j/ | http://backend/y/ | /j/k | http://nginx/j/k | http://backend/y/k |
/j/ | http://backend/y/ | /j/k/ | http://nginx/j/k/ | http://backend/y/k/ |
location | proxy_pass | path | nginx url | backend url |
---|---|---|---|---|
/ws/ | http://backend/spring/ws/ | /ws/qrlogin | http://nginx/ws/qrlogin | http://backend/spring/ws/qrlogin |
/ws/ | http://backend/spring/ws/ | /ws/stomp | http://nginx/ws/stomp | http://backend/spring/ws/stomp |
参考文档:
nginx反向代理location和proxy_pass的映射关系
https://blog.mybatis.io/post/4a3305d7.html