› NGINX
› NGINX Trac
› 3rd Party Modules
› Security Advisories
› CHANGES
› OpenResty
› ngx_lua
› Tengine
在线学习资源
› NGINX 开发从入门到精通
NGINX Modules
› ngx_echo
liuzh365
V2EX  ›  NGINX

nginx 一个 location 能实现三个 proxy_pass 吗

  •  
  •   liuzh365 · Jul 2, 2021 · 4560 views
    This topic created in 1957 days ago, the information mentioned may be changed or developed.
    新手,我想在 nginx 配置上实现一种情况:一个 location 能实现三个 proxy_pass,匹配到第一个就转发第一个,不行就匹配第二个。。。
    但是能搜到的实现方式 https://blog.csdn.net/liuxiao723846/article/details/83147792
    要么是根据路径的字符串拼接来 if else,要么就是根据 url 后面的参数来区分=_=。但是参数和 url 这两种方式,以目前的场景暂时实现不了。
    dier
    dier
    Jul 2, 2021
    1
    你这三个 proxy 是一样的吗?
    如果是就用 upstream
    如果不就是用多个 location 或 if 来判断
    liuzh365
    liuzh365
    OP
    Jul 2, 2021
    2
    类似于
    location / {
    // 某种逻辑判断第一个
    proxy_pass http://192.168.1.1
    // 不行就第二个
    proxy_pass http://10.10.1.1
    // 不行继续往下
    。。。
    }

    目前路径已经确定了不方便改动,然后暂时也没有加参数的打算
    liuzh365
    liuzh365
    OP
    Jul 2, 2021
    3
    @dier 不一样的,我去看看怎么用
    cpstar
    cpstar
    Jul 2, 2021
    4
    如果 uri 或者参数场景都不能实现。那你靠什么实现 if-else 呢?
    cpstar
    cpstar
    Jul 2, 2021
    5
    如果仅是 2#所述的根据服务器状态来执行,那还是得用 upstream,这就是负载均衡的概念了,而不是仅仅为反代
    liuzh365
    liuzh365
    OP
    Jul 2, 2021
    6
    @cpstar 我就是不知道,也查不到别的资料,才问问大伙=_+
    dier
    dier
    Jul 2, 2021
    7
    我尝试理解一下你的意思
    访问 a.d.com/html 跟 a.d.com/api 这个 html 跟 api 对应分别对应在 proxy1 和 proxy2 proxy3 上(三者提供服务不相同)?
    如果是这样,要么用多 location 要么就是 if 来判断
    cpstar
    cpstar
    Jul 2, 2021
    8
    @liuzh336 6# 你想干啥你不知道么?
    看样子像是根据服务器的服务器状态来一级一级反代,而不是根据用户请求条件分流。
    你给的案例,是根据用户请求来判定反代去向。所以跟你的期望应该不一致。
    lscho
    lscho
    Jul 2, 2021
    9
    你说的这个不就是负载均衡吗。。。upstream 可以判断服务器是否正常。
    greenskinmonster
    greenskinmonster
    Jul 2, 2021
    10
    用 try_files 应该可以
    i.imgur.com/McIFG23.png
    cnoder
    cnoder
    Jul 2, 2021
    11
    openresty 是可以
    zw1027
    zw1027
    Jul 2, 2021
    12
    实现不了就上 lua 自己写逻辑
    maxbon
    maxbon
    Jul 2, 2021
    13
    用变量判断试试,不确定可不可行,比如
    if ( xxx ) {
    set $a 192.168.1.1;
    }
    if ( yyy ) {
    set $a 192.168.1.2;
    }
    proxy_pass http://$a;
    ryd994
    ryd994
    Jul 3, 2021
    14
    翻译翻译,什么叫“某种逻辑”?什么叫“匹配”?
    dorothyREN
    dorothyREN
    Jul 3, 2021
    15
    写三个一样的 location proxypass 不同就行了吧,这个是按顺序匹配的
    cnrting
    cnrting
    Apr 12, 2025 via iPhone
    16
    不是 proxy-next-upstream 吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2462 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    ♥ Do have faith in what you're doing.