2015-01-02 27 views
1

我有一個通過nginx proxy_pass部署的Node.js Express服務器。我有兩個paralell守護進程在使用上游負載平衡的不同端口上。 Express服務器的初始化需要時間,所以我發送Error 500直到準備就緒。我希望nginx使用其他上游服務器,直到第一個服務器準備就緒,反之亦然。如何使用Node.js Express強制使用nginx proxy_next_upstream?

我試圖使用proxy_next_upstream,但它不能正常工作。始終有至少一個顯示給用戶的錯誤500。

也許原因隱藏在nginx doc的以下句子中:「應該記住,只有在沒有任何內容發送給客戶端的情況下,才能向下一個服務器傳遞請求。」

這裏是proxy_pass配置:

proxy_pass http://node_servers ; 
proxy_set_header Host $http_host; 
proxy_set_header x-forwarded-for $remote_addr; 
proxy_read_timeout 60; proxy_connect_timeout 60; 

這些都是上行流:

upstream node_servers { 
    server 127.0.0.1:12005; 
    server 127.0.0.1:12006; 
} 

這就是我如何發送錯誤的節點快報:

res.status(500).send('The server is not ready yet!'); 

回答

1

你必須配置nginx在收到「錯誤500」時使用下一臺服務器。

默認情況下,Nginx的使用上「連接錯誤」和「超時」下一個服務器而已,所以你必須調整你的配置:「使用文檔,盧克」

proxy_next_upstream error timeout http_500; 

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

+0

我使用了proxy_next_upstream,但即使如此它也不起作用。我懷疑Express在發生錯誤之前發送了一些內容,因此它會傳送給用戶。 – mitroo

+0

閱讀日誌!特別是錯誤一。 –

+0

並使用tcpdump來聲明您的懷疑 –