假设我们有以下几项最低要求nginx.conf:
server {
listen 443 default ssl;
location /api/v1 {
proxy_pass http://127.0.0.1:8080;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试将nginx自身用作事件源。我系统中的另一个组件应该知道有任何HTTP请求传入,而理想情况下不会在此第一个proxy_pass指令上阻止流量。
是否有可能proxy_pass在完全忽略该转发请求的结果的同时,将HTTP请求“转发”到另一个组件?
编辑:为了更清楚地陈述需求:我想要实现的是,将相同的 HTTP请求发送到两个不同的后端服务器,其中只有一个真正按照nginx处理连接。另一个应该只是一个“事件ping”,以通知其他服务已经有一个请求。
这可以使用第三方Nginx Echo Module的echo_location指令(或类似的,浏览指令)来完成。您将需要使用此模块编译Nginx或使用Openresty,后者与Nginx捆绑在一起,例如有用的东西。
大纲代码:
server {
[...]
location /main {
echo_location /sub;
proxy_pass http://main.server:PORT;
}
location /sub {
internal;
proxy_pass http://alt.server:PORT;
}
}
Run Code Online (Sandbox Code Playgroud)
现在还有未记录的post_action指令,它不需要第三方模块:
server {
[...]
location /main {
proxy_pass http://main.server:PORT;
post_action @sub;
}
location @sub {
proxy_pass http://alt.server:PORT;
}
}
Run Code Online (Sandbox Code Playgroud)
在主请求完成后,这将触发一个子请求。这是我建议使用的一个旧答案:NGinx-对特定URL模式的Count请求。
但是,此伪指令已从Nginx文档中删除,现在可以用作警告购买者。从我给出答案的2012年开始的四年后,我不建议您使用此答案。
小智 6
我知道这已经完成了,但我想用新的、更新的答案来回答,因为它在 3 年后出现在搜索中。镜子模块工作得非常好。我从 nginx 文档中得到了这个,所以我认为它是官方的并且可用。
server {
[...]
location /main {
mirror /mirror
proxy_pass http://main.server:PORT;
}
location /mirror {
proxy_pass http://alt.server:PORT;
}
}
Run Code Online (Sandbox Code Playgroud)