V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2021-07-02 11:42:06 +08:00 · 3196 次点击
    这是一个创建于 1268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手,我想在 nginx 配置上实现一种情况:一个 location 能实现三个 proxy_pass,匹配到第一个就转发第一个,不行就匹配第二个。。。
    但是能搜到的实现方式 https://blog.csdn.net/liuxiao723846/article/details/83147792
    要么是根据路径的字符串拼接来 if else,要么就是根据 url 后面的参数来区分=_=。但是参数和 url 这两种方式,以目前的场景暂时实现不了。
    dier
        1
    dier  
       2021-07-02 11:47:37 +08:00
    你这三个 proxy 是一样的吗?
    如果是就用 upstream
    如果不就是用多个 location 或 if 来判断
    liuzh365
        2
    liuzh365  
    OP
       2021-07-02 11:48:17 +08:00
    类似于
    location / {
    // 某种逻辑判断第一个
    proxy_pass http://192.168.1.1
    // 不行就第二个
    proxy_pass http://10.10.1.1
    // 不行继续往下
    。。。
    }

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