2016-10-22 36 views
0

配置nginx的proxy_pass比方說,我們有以下相當小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」來通知其他服務已經有請求。

回答

1

這可以使用echo_location指令來完成(或類似的,瀏覽指令)第三方Nginx Echo Module的。您將需要編譯Nginx的這個模塊或使用Openresty這是捆綁了有用的東西,Nginx的,如這一點。

大綱代碼:

server { 
    [...] 

    location /main { 
     echo_location /sub; 
     proxy_pass http://main.server:PORT; 
    } 
    location /sub { 
     internal; 
     proxy_pass http://alt.server:PORT; 
    } 
} 

也有不需要第三方模塊現在無證post_action指令:

server { 
    [...] 

    location /main { 
     proxy_pass http://main.server:PORT; 
     post_action @sub; 
    } 
    location @sub { 
     proxy_pass http://alt.server:PORT; 
    } 
} 

主請求完成後,這將觸發一個子請求。這裏是我推薦使用這個的一箇舊答案:NGinx - Count requests for a particular URL pattern

然而,這個指令已經從Nginx的文檔刪除,這進一步使用現在是買者自負的情況。從2012年起,當我給出答案的四年後,我不會推薦使用這個。

+0

正是我在找的東西,謝謝你的解釋和選擇! – markusthoemmes

0

這是Nginx的一大優勢:您可以從多個後端服務器服務。您必須包含另一個位置,由另一個方向引用。在這裏,你得到了我的網站可用/默認的樣品,從FastCGI的(MonoDevelop的),GlassFish的(JAVA),靜態內容&特殊的錯誤threatment服務器。希望能幫助到你。

#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;   
    } 
+0

這正是我不想要什麼。我正在考慮將請求發送到**一個**位置的兩個後端。編輯這個問題更加精確。 – markusthoemmes