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

271 天前
 hayhong123
举个例子,就是想要做到一个 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/;
}
2113 次点击
所在节点    NGINX
14 条回复
Jeremial
271 天前
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
271 天前
@Jeremial 我想的是 同时转到多个地址上 不是轮询或者 ip_hash 之类的负载 请问大佬这个需要怎么改一下哈?
Kinnice
271 天前
看起来得上 lua 脚本了
angryfish
271 天前
我曾经也有这个需求。
单纯 nginx 没搞出,用 node 写了个转发。
关注一下纯 nginx 的方案。
deorth
271 天前
你打算把哪个响应返回给客户端?
wu00
271 天前
这不是 proxy ,而是 mirror ,可以搜一下 nginx mirror
你这个需求放到业务层面去处理应该合理一点,比如 a,b 响应成功,c ,d 响应 500 咋整
cdlnls
271 天前
用 lua 脚本应该能实现,脚本很简单,问下一下 ai 就可以了。
大致流程是,访问的时候,lua 一个 for 循环去请求那几个地址就可以了。还可以根据需要,处理一下接口的响应信息。
nanwangnongfu
271 天前
感觉可以考虑 MQ 的消息广播
yinmin
271 天前
逻辑有点问题,同时发送到多个地址,nginx 没法选返回的结果页面用哪个。需要自己写一个程序吧
cxsz
271 天前
nginx 可以调用 js ,用 js 写一个脚本吧
F7TsdQL45E0jmoiG
271 天前
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
271 天前
openresty ,上 lua 脚本,或者用 nginx 的流量复制,可以的
lm930129
271 天前
你这个难道不是应该后端配置地址数组么,后端实现调用的时候判断是否成功吧
lidapang
270 天前
Nginx 流量镜像,可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1021393

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX