V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
hayhong123
V2EX  ›  NGINX

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

  •  
  •   hayhong123 · 261 天前 · 2103 次点击
    这是一个创建于 261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举个例子,就是想要做到一个 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
    Jeremial
        1
    Jeremial  
       261 天前
    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
       261 天前
    @Jeremial 我想的是 同时转到多个地址上 不是轮询或者 ip_hash 之类的负载 请问大佬这个需要怎么改一下哈?
    Kinnice
        3
    Kinnice  
       261 天前
    看起来得上 lua 脚本了
    angryfish
        4
    angryfish  
       261 天前
    我曾经也有这个需求。
    单纯 nginx 没搞出,用 node 写了个转发。
    关注一下纯 nginx 的方案。
    deorth
        5
    deorth  
       261 天前 via Android   ❤️ 2
    你打算把哪个响应返回给客户端?
    wu00
        6
    wu00  
       261 天前
    这不是 proxy ,而是 mirror ,可以搜一下 nginx mirror
    你这个需求放到业务层面去处理应该合理一点,比如 a,b 响应成功,c ,d 响应 500 咋整
    cdlnls
        7
    cdlnls  
       261 天前
    用 lua 脚本应该能实现,脚本很简单,问下一下 ai 就可以了。
    大致流程是,访问的时候,lua 一个 for 循环去请求那几个地址就可以了。还可以根据需要,处理一下接口的响应信息。
    nanwangnongfu
        8
    nanwangnongfu  
       261 天前
    感觉可以考虑 MQ 的消息广播
    yinmin
        9
    yinmin  
       261 天前 via iPhone
    逻辑有点问题,同时发送到多个地址,nginx 没法选返回的结果页面用哪个。需要自己写一个程序吧
    cxsz
        10
    cxsz  
       261 天前
    nginx 可以调用 js ,用 js 写一个脚本吧
    F7TsdQL45E0jmoiG
        11
    F7TsdQL45E0jmoiG  
       261 天前
    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  
       261 天前
    openresty ,上 lua 脚本,或者用 nginx 的流量复制,可以的
    lm930129
        13
    lm930129  
       261 天前
    你这个难道不是应该后端配置地址数组么,后端实现调用的时候判断是否成功吧
    lidapang
        14
    lidapang  
       260 天前
    Nginx 流量镜像,可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 22:34 · PVG 06:34 · LAX 14:34 · JFK 17:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.