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 · 3106 views
    This topic created in 820 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
        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 咋整
    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   ·   3140 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 03:36 · PVG 11:36 · LAX 20:36 · JFK 23:36
    ♥ Do have faith in what you're doing.