请教一下大家 nginx 能把一个接口 同时代理到多个地址上吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hayhong123
V2EX    NGINX

请教一下大家 nginx 能把一个接口 同时代理到多个地址上吗?

  •  
  •   hayhong123 2024-03-07 11:44:38 +08:00 2600 次点击
    这是一个创建于 588 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举个例子,就是想要做到一个 location 中配置多个 proxy_pass 的效果,具体场景是三方短信回调只能配置一个地址,所以就想无脑把这个地址同时转发到多套环境的接口上。
    location /api/message/xxx {
    proxy_pass https://a.com/api/message/xxx/;
    proxy_pass https://b.com/api/message/xxx/;
    proxy_pass https://c.com/api/message/xxx/;
    proxy_pass https://d.com/api/message/xxx/;
    }
    14 条回复    2024-03-08 09:48:07 +08:00
    wyntau
        1
    wyntau  
       2024-03-07 11:46:18 +08:00
    nginx upstream
    https://nginx.org/en/docs/http/ngx_http_upstream_module.html


    upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backup1.example.com:8080 backup;
    server backup2.example.com:8080 backup;
    }

    server {
    location / {
    proxy_pass http://backend;
    }
    }
    hayhong123
        2
    hayhong123  
    OP
       2024-03-07 11:50:13 +08:00
    @Jeremial 我想的是 同时转到多个地址上 不是轮询或者 ip_hash 之类的负载 请问大佬这个需要怎么改一下哈?
    Kinnice
        3
    Kinnice  
       2024-03-07 11:54:06 +08:00
    看起来得上 lua 脚本了
    GBdG6clg2Jy17ua5
        4
    GBdG6clg2Jy17ua5  
       2024-03-07 11:57:04 +08:00
    我曾经也有这个需求。
    单纯 nginx 没搞出,用 node 写了个转发。
    关注一下纯 nginx 的方案。
    td width="10" valign="top">
    deorth
        5
    deorth  
       2024-03-07 11:59:43 +08:00 via Android   2
    你打算把哪个响应返回给客户端?
    wu00
        6
    wu00  
       2024-03-07 11:59:56 +08:00
    这不是 proxy ,而是 mirror ,可以搜一下 nginx mirror
    你这个需求放到业务层面去处理应该合理一点,比如 a,b 响应成功,c ,d 响应 500 咋整
    cctv6
        7
    cctv6  
       2024-03-07 12:01:10 +08:00
    用 lua 脚本应该能实现,脚本很简单,问下一下 ai 就可以了。
    大致流程是,访问的时候,lua 一个 for 循环去请求那几个地址就可以了。还可以根据需要,处理一下接口的响应信息。
    nanwangnongfu
        8
    nanwangnongfu  
       2024-03-07 12:32:21 +08:00
    感觉可以考虑 MQ 的消息广播
    yinmin
        9
    yinmin  
       2024-03-07 13:12:54 +08:00 via iPhone
    逻辑有点问题,同时发送到多个地址,nginx 没法选返回的结果页面用哪个。需要自己写一个程序吧
    cxsz
        10
    cxsz  
       2024-03-07 13:13:46 +08:00
    nginx 可以调用 js ,用 js 写一个脚本吧
    F7TsdQL45E0jmoiG
        11
    F7TsdQL45E0jmoiG  
       2024-03-07 13:35:12 +08:00
    local ngx = ngx

    function content_by_lua_block(r)
    local servers = {
    "http://b.com/api/message",
    "http://c.com/api/message",
    "http://d.com/api/message",
    }

    local i = 1
    for _, server in ipairs(servers) do
    ngx.req.set_uri(server)
    ngx.req.set_method("GET")

    ngx.say("")

    i = i + 1
    end
    end

    大概就这样
        12
    flavoury  
       2024-03-07 23:05:42 +08:00
    openresty ,上 lua 脚本,或者用 nginx 的流量复制,可以的
    lm930129
        13
    lm930129  
       2024-03-07 23:31:54 +08:00
    你这个难道不是应该后端配置地址数组么,后端实现调用的时候判断是否成功吧
    lidapang
        14
    lidapang  
       2024-03-08 09:48:07 +08:00
    Nginx 流量镜像,可以的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5291 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 07:07 PVG 15:07 LAX 00:07 JFK 03:07
    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