我们说我们有以下非常小的nginx.conf
:
server {
listen 443 default ssl;
location /api/v1 {
proxy_pass http://127.0.0.1:8080;
}
}
现在,我尝试将nginx
本身用作事件源。我系统中的另一个组件应该知道任何HTTP请求,而理想情况下不会阻止第一个proxy_pass
指令上的流量。
是否有可能有第二个proxy_pass
"只是"将HTTP请求转发给另一个组件,同时完全忽略转发请求的结果?
编辑:更清楚地说明要求:我想要实现的是相同的 HTTP请求被发送到两个不同的后端服务器,其中只有一个真正处理nginx连接。另一个应该是"事件ping"通知其他服务有请求。
答案 0 :(得分:4)
这可以使用第三方echo_location的Nginx Echo Module指令(或类似的,浏览指令)来完成。您将需要使用此模块编译Nginx或使用Openresty,这是Nginx与此类有用的东西捆绑在一起。
大纲代码:
server {
[...]
location /main {
proxy_pass http://main.server:PORT;
post_action @sub;
}
location @sub {
proxy_pass http://alt.server:PORT;
}
}
现在还有一个没有文档的post_action指令,它不需要第三方模块:
{{1}}
这将在主要请求完成后触发子请求。这是一个陈旧的答案,我建议使用它:NGinx - Count requests for a particular URL pattern。
但是,该指令已从Nginx文档中删除,现在进一步使用此指令就是一个警告的情况。从2012年我给出答案的四年后,我不建议使用它。
答案 1 :(得分:1)
我知道已经完成了,但是我想用最新的答案作答,因为3年后它在搜索中出现了。镜像模块工作出色。我是从nginx文档中获得的,所以我认为它是官方的并且可以使用。
server {
[...]
location /main {
mirror /mirror
proxy_pass http://main.server:PORT;
}
location /mirror {
proxy_pass http://alt.server:PORT;
}
}
答案 2 :(得分:0)
这是nginx的一大优势:您可以从多个后端服务器提供服务。您必须再包含一个位置,由另一个方向引用。在这里你得到了我的网站样本 - 可用/默认,来自fastcgi(monodevelop),glassfish(java),静态内容和放大器的服务器。特殊的错误威胁。希望它有所帮助。
#fastcgi
location ~* \.(aspx)$ {
root /home/published/;
index Default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
#Glassfish
location /GameFactoryService/ {
index index.html;
add_header Access-Control-Allow-Origin $http_origin;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:18000/GameFactoryService/;
}
#static content
location / {
root /usr/share/nginx_static_content;
}
error_page 500 501 502 503 504 505 506 507 508 509 510 511 /50x.html;
#error
location = /50x.html {
add_header Access-Control-Allow-Origin $http_origin;
internal;
}