使用两个并行位置配置nginx proxy_pass

时间:2016-10-22 10:10:51

标签: nginx

我们说我们有以下非常小的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"通知其他服务有请求。

3 个答案:

答案 0 :(得分:4)

这可以使用第三方echo_locationNginx 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;          
    }