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

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

  •  
  •   hayhong123 Mar 7, 2024 3104 views
    This topic created in 819 days ago, the information mentioned may be changed or developed.
    举个例子,就是想要做到一个 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 a target="_blank" href="https://d.com/api/message/xxx/;" rel="nofollow noopener">https://d.com/api/message/xxx/;
    }
    14 replies    2024-03-08 09:48:07 +08:00
    ik0r
        1
    ik0r  
       Mar 7, 2024
    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
       Mar 7, 2024
    @Jeremial 我想的是 同时转到多个地址上 不是轮询或者 ip_hash 之类的负载 请问大佬这个需要怎么改一下哈?
    Kinnice
        3
    Kinnice  
       Mar 7, 2024
    看起来得上 lua 脚本了
    GBdG6clg2Jy17ua5
        4
    GBdG6clg2Jy17ua5  
       Mar 7, 2024
    我曾经也有这个需求。
    单纯 nginx 没搞出,用 node 写了个转发。
    关注一下纯 nginx 的方案。
    deorth
        5
    deorth  
       Mar 7, 2024 via Android   2
    你打算把哪个响应返回给客户端?
    wu00
        6
    wu00  
       Mar 7, 2024
    这不是 proxy ,而是 mirror ,可以搜一下 nginx mirror
    你这个需求放到业务层面去处理应该合理一点,比如 a,b 响应成功,c ,d 响应 500 咋整
    td width="48" valign="top" align="center">cctv6
        7
    cctv6  
       Mar 7, 2024
    用 lua 脚本应该能实现,脚本很简单,问下一下 ai 就可以了。
    大致流程是,访问的时候,lua 一个 for 循环去请求那几个地址就可以了。还可以根据需要,处理一下接口的响应信息。
    nanwangnongfu
        8
    nanwangnongfu  
       Mar 7, 2024
    感觉可以考虑 MQ 的消息广播
    yinmin
        9
    yinmin  
       Mar 7, 2024 via iPhone
    逻辑有点问题,同时发送到多个地址,nginx 没法选返回的结果页面用哪个。需要自己写一个程序吧
    cxsz
        10
    cxsz  
       Mar 7, 2024
    nginx 可以调用 js ,用 js 写一个脚本吧
    F7TsdQL45E0jmoiG
        11
    F7TsdQL45E0jmoiG  
       Mar 7, 2024
    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

    大概就这样
    flavoury
        12
    flavoury  
       Mar 7, 2024
    openresty ,上 lua 脚本,或者用 nginx 的流量复制,可以的
    lm930129
        13
    lm930129  
       Mar 7, 2024
    你这个难道不是应该后端配置地址数组么,后端实现调用的时候判断是否成功吧
    lidapang
        14
    lidapang  
       Mar 8, 2024
    Nginx 流量镜像,可以的
    About     Help     Advertise     Blog     API     FAQ     Solana     1142 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 472ms UTC 18:14 PVG 02:14 LAX 11:14 JFK 14:14
    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