• Nginx反向代理location与proxy_pass配置规则总结


    一、location配置规则

    1.匹配模式及顺序举例

    location = /uri

    =开头表示精确匹配,只有完全匹配上才能生效

    location ^~ /uri

    ^~开头对URL路径进行前缀匹配,并且在正则之前

    location ~ pattern

    ~开头表示区分大小写的正则匹配

    location /uri

    不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则

    location /

    通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

    2.location 是否以“/”结尾

    在ngnix中location进行的是模糊匹配

    • 没有“/”结尾时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等
    • 而有“/”结尾时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求

    二、proxy_pass配置规则

    (1)配置proxy_pass时,当在后面的url加上了/,相当于是绝对路径,则Nginx不会把location中匹配的路径部分加入代理uri。

    (2)如果配置proxy_pass时,后面没有/,Nginx则会把匹配的路径部分加入代理uri。

    例如:

    server {
            listen       8081;
            server_name  localhost;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    #情景1:proxy_pass后有/ ,表绝对路径,不把匹配部分加入最终代理路径(location 和proxy_pass结尾一致)
            #访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml
            #最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml
    		location /WCP.Service/wcp/modeladapter/download/ {
                proxy_pass   http://10.194.171.7:13082/modeladapter/download/;
            }
            #访问地址:http://localhost:8081/model/asc.shtml
            #最终代理:http://127.0.0.1:8082/model/asc.shtml
    		location /model/ {
                proxy_pass   http://127.0.0.1:8082/model/;
            }
    #情景2:proxy_pass后有/ ,表绝对路径,不把匹配部分加入最终代理路径(location 和proxy_pass结尾不一致)
            #访问地址:http://localhost:8081/model/asc.shtml
            #最终代理:http://127.0.0.1:8082/asc.shtml
    		location /model/ {
                proxy_pass   http://127.0.0.1:8082/;
            }
    #情景3:proxy_pass后没有 / ,Nginx会把匹配部分带到代理的url
            #访问地址:http://localhost:8081/model/asc.shtml
            #最终代理:http://127.0.0.1:8082/model/asc.shtml
    		location /model/ {
                proxy_pass   http://127.0.0.1:8082;
            }
    
    #情景4
            #访问地址:http://localhost:8081/model/asc.shtml
            #最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml
    		location /model/ {
                proxy_pass   http://127.0.0.1:8082/AAA;
            }
    #情景5
            #访问地址:http://localhost:8081/model/asc.shtml
            #最终代理:http://127.0.0.1:8082/asc.shtml
    		location /model {
                proxy_pass   http://127.0.0.1:8082/;
            }
    #情景6
            #访问地址:http://localhost:8081/modelBBB/asc.shtml
            #最终代理:http://127.0.0.1:8082/asc.shtml
    		location /model {
                proxy_pass   http://127.0.0.1:8082/;
            }
    
    
    		location /opus-front-sso {
                proxy_pass   http://10.194.170.94/opus-front-sso;
            }
    		location /awater {
                proxy_pass   http://10.194.170.94/awater;
            }
    
            
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    Linux—curl 命令用法大总结
    如何使用Github的Action实现博客的自动部署
    Day04NTFS安全权限、文件共享服务器、破解winxp系统密码
    7-15 求矩阵的局部极大值
    【软件设计模式之外观模式】
    26 环形链表II
    Flink DataStream创建执行环境的正确方式与细节问题
    机器学习入门教学——梯度下降、梯度上升
    Maven——分模块开发与设计(重点)
    MySQL之事务和redo日志
  • 原文地址:https://blog.csdn.net/m0_67391518/article/details/126038068