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

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

  •  
  •   hayhong123 · Mar 7, 2024 · 3589 views
    This topic created in 978 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 https://d.com/api/message/xxx/;
    }
    14 replies  •  2024-03-08 09:48:07 +08:00
    ik0r
    ik0r
    Mar 7, 2024
    1
    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
    hayhong123
    OP
    Mar 7, 2024
    2
    @Jeremial 我想的是 同时转到多个地址上 不是轮询或者 ip_hash 之类的负载 请问大佬这个需要怎么改一下哈?
    Kinnice
    Kinnice
    Mar 7, 2024
    3
    看起来得上 lua 脚本了
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    Mar 7, 2024
    4
    我曾经也有这个需求。
    单纯 nginx 没搞出,用 node 写了个转发。
    关注一下纯 nginx 的方案。
    deorth
    deorth
    Mar 7, 2024 via Android❤️2
    5
    你打算把哪个响应返回给客户端?
    wu00
    wu00
    Mar 7, 2024
    6
    这不是 proxy ,而是 mirror ,可以搜一下 nginx mirror
    你这个需求放到业务层面去处理应该合理一点,比如 a,b 响应成功,c ,d 响应 500 咋整
    cctv6
    cctv6
    Mar 7, 2024
    7
    用 lua 脚本应该能实现,脚本很简单,问下一下 ai 就可以了。
    大致流程是,访问的时候,lua 一个 for 循环去请求那几个地址就可以了。还可以根据需要,处理一下接口的响应信息。
    nanwangnongfu
    nanwangnongfu
    Mar 7, 2024
    8
    感觉可以考虑 MQ 的消息广播
    yinmin
    yinmin
    Mar 7, 2024 via iPhone
    9
    逻辑有点问题,同时发送到多个地址,nginx 没法选返回的结果页面用哪个。需要自己写一个程序吧
    cxsz
    cxsz
    Mar 7, 2024
    10
    nginx 可以调用 js ,用 js 写一个脚本吧
    F7TsdQL45E0jmoiG
    F7TsdQL45E0jmoiG
    Mar 7, 2024
    11
    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
    flavoury
    Mar 7, 2024
    12
    openresty ,上 lua 脚本,或者用 nginx 的流量复制,可以的
    lm930129
    lm930129
    Mar 7, 2024
    13
    你这个难道不是应该后端配置地址数组么,后端实现调用的时候判断是否成功吧
    lidapang
    lidapang
    Mar 8, 2024
    14
    Nginx 流量镜像,可以的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4838 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 02:01 · PVG 10:01 · LAX 18:01 · JFK 21:01
    ♥ Do have faith in what you're doing.