自己平常也是被nginx的代理转发搞得很乱。每次找资料别人都是直接举例,但是举例根本没办法全面,而且也没有总结规律,早晚会忘记。所以授人以鱼不如授人以渔,把握规则才是本质。大道至简,教会你们如何推导。学会后,再也不会忘记。
概念定义
server {
listen 80;
server_name 127.0.0.1;
location /api/ {
proxy_pass http://127.0.0.1:8000;
}
}
server_name是127.0.0.1。把proxy_pass理解为 http://127.0.0.1:8000
(协议+server_name+端口)加 替换部分。
记 main内容 = 协议+server_name+端口
replace内容 = proxy_pass内容 - main内容
location /api/ {} 的 /api/ 为映射部分,记为route
则代理结构图如下:
location route {
proxy_pass main+replace
}
则转发规则为当请求路径存在 "route" 的字符串时,进行判断
- replace部分为空.只做后端服务的路由转发,也就是把请求的main部分替换
- replace部分不空.还要把请求路径中的route部分换为replace部分
如果来个请求http://127.0.0.1/api/book/list
当nginx配置为
location /api/ {
proxy_pass http://127.0.0.1:8000;
}
结果会转发为 http://127.0.0.1:8000/api/book/list
当nginx配置为
location /api/ {
proxy_pass http://127.0.0.1:8000/v2/;
}
结果会转发为 http://127.0.0.1:8000/v2/book/list
如果有错误,欢迎大佬来打脸。。