关于nginx代理转发最简单的解答

132 阅读1分钟

自己平常也是被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" 的字符串时,进行判断

  1. replace部分为空.只做后端服务的路由转发,也就是把请求的main部分替换
  2. 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

如果有错误,欢迎大佬来打脸。。