nginx 一个 location 能实现三个 proxy_pass 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuzh365
V2EX    NGINX

nginx 一个 location 能实现三个 proxy_pass 吗

  •  
  •   liuzh365 2021 年 7 月 2 日 3867 次点击
    这是一个创建于 1696 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手,我想在 nginx 配置上实现一种情况:一个 location 能实现三个 proxy_pass,匹配到第一个就转发第一个,不行就匹配第二个。。。
    但是能搜到的实现方式 https://blog.csdn.net/liuxiao723846/article/details/83147792
    要么是根据路径的字符串拼接来 if else,要么就是根据 url 后面的参数来区分=_=。但是参数和 url 这两种方式,以目前的场景暂时实现不了。
    dier
        1
    dier  
       2021 年 7 月 2 日
    你这三个 proxy 是一样的吗?
    如果是就用 upstream
    如果不就是用多个 location 或 if 来判断
    liuzh365
        2
    liuzh365  
    OP
       2021 年 7 月 2 日
    类似于
    location / {
    // 某种逻辑判断第一个
    proxy_pass http://192.168.1.1
    // 不行就第二个
    proxy_pass http://10.10.1.1
    // 不行继续往下
    。。。
    }

    目前路径已经确定了不方便改动,然后暂时也没有加参数的打算
    liuzh365
        3
    liuzh365  
    OP
       2021 年 7 月 2 日
    @dier 不一样的,我去看看怎么用
    cpstar
        4
    cpstar  
       2021 年 7 月 2 日
    如果 uri 或者参数场景都不能实现。那你靠什么实现 if-else 呢?
    cpstar
        5
    cpstar  
       2021 年 7 月 2 日
    如果仅是 2#所述的根据服务器状态来执行,那还是得用 upstream,这就是负载均衡的概念了,而不是仅仅为反代
    liuzh365
        6
    liuzh365  
    OP
       2021 年 7 月 2 日
    @cpstar 我就是不知道,也查不到别的资料,才问问大伙=_+
    dier
        7
    dier  
       2021 年 7 月 2 日
    我尝试理解一下你的意思
    访问 a.d.com/htmla.d.com/api 这个 html 跟 api 对应分别对应在 proxy1 和 proxy2 proxy3 上(三者提供服务不相同)?
    如果是这样,要么用多 location 要么就是 if 来判断
    cpstar
        8
    cpstar  
       2021 年 7 月 2 日
    @liuzh336 6# 你想干啥你不知道么?
    看样子像是根据服务器的服务器状态来一级一级反代,而不是根据用户请求条件分流。
    你给的案例,是根据用户请求来判定反代去向。所以跟你的期望应该不一致。
    lscho
        9
    lscho  
       2021 年 7 月 2 日
    你说的这个不就是负载均衡吗。。。upstream 可以判断服务器是否正常。
    greenskinmonster
        10
    greenskinmonster  
       2021 年 7 月 2 日
    用 try_files 应该可以
    i.imgur.com/McIFG23.png
    cnoder
        11
    cnoder  
       2021 年 7 月 2 日
    openresty 是可以
    zw1027
        12
    zw1027  
       2021 年 7 月 2 日
    实现不了就上 lua 自己写逻辑
    maxbon
        13
    maxbon  
       2021 年 7 月 2 日
    用变量判断试试,不确定可不可行,比如
    if ( xxx ) {
    set $a 192.168.1.1;
    }
    if ( yyy ) {
    set $a 192.168.1.2;
    }
    proxy_pass http://$a;
    ryd994
        14
    ryd994  
       2021 年 7 月 3 日
    翻译翻译,什么叫“某种逻辑”?什么叫“匹配”?
    dorothyREN
        15
    dorothyREN  
       2021 年 7 月 3 日
    写三个一样的 location proxypass 不同就行了吧,这个是按顺序匹配的
    cnrting
        16
    cnrting  
       2025 年 4 月 12 日 via iPhone
    不是 proxy-next-upstream 吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1972 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:58 PVG 17:58 LAX 01:58 JFK 04:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86