2017-08-15 56 views
0

所以我最近一直在學習更多關於Nginx的知識。我之前使用它來在同一個系統上提供一個Web應用程序,但要單獨擴展。我已經能夠設置一個Nginx負載均衡器和2個運行我的Flask應用程序的Gunicorn服務器。我的問題是如何設置它來使用來自每個這些Gunicorn服務器的Nginx的靜態服務能力。Nginx負載均衡器提供來自多個WSGI服務器的靜態文件

可以說我有3個虛擬專用服務器我正在付錢。號碼1有Nginx作爲負載均衡器/反向代理路由請求到2號和3號,這是重複的網絡應用程序。我希望這些獨立於運行應用程序所需的一切,包括它們的靜態目錄。因此,它不是在負載均衡器/反向代理上擁有靜態目錄,而是全部包含在Web應用程序目錄結構中。

目前,它看起來像這樣:

        Gunicorn -> Flask 
           /
Nginx loadbalancer/reverseproxy 
           \ 
            Gunicorn -> Flask 

我需要把Nginx的每個Gunicorn服務器訪問靜態DIR並返回靜態文件的Nginx的負載均衡器/反向代理呢?所以如下:

        Nginx -> Gunicorn -> Flask 
           /
Nginx loadbalancer/reverseproxy 
           \ 
            Nginx -> Gunicorn -> Flask 

也許我這樣做是錯誤的,以上是矯枉過正,可能不會增加性能。如果是這樣,在一個主要入口點上進行負載平衡和緩存的良好結構以及如何與Gunicorn一起提供靜態文件的路由不需要?

我真正想要的是能夠安裝Web服務器的所有內容,因此我可以根據需要輕鬆添加更多內容,並將負載平衡器指向這些上游服務器。

任何建議是有幫助的。

+0

我很欣賞這些反饋。我會檢查你的建議。我會認爲這種部署適合於開發。畢竟你的網絡應用程序與Web服務器無關。是的,我的靜態內容(CSS,JavaScript,HTML內容)是所有代碼都有點特定。 –

+0

Asd你可以看到我回答了許多Anaconda相關的問題,從故障排除到與編程無關的配置,而是一個用於管理包的軟件。這些問題似乎沒有得到投票。 –

回答

0

假設,這將是對生產,而據我gunicorn的理解需要我,你不應該使用麒麟本身爲靜態文件,

在這一天結束在前面的nginx的整個系統將充當負載均衡器/ rev代理,您可以將該服務器配置爲僅將傳入請求分配給一組上游服務器,現在,關於上游服務器,將會像這樣去做

Nginx -> Gunicorn -> Flask 

如果其配置會使某些請求由靜態文件目錄提供,而其他請求則直接轉至gunicorn服務器,則

在一天結束時,您應將離散上游服務器部署到池並將其添加到rev代理CONF,所以它看起來是這樣的(正如你所提到的)

        Nginx -> Gunicorn -> Flask 
           /
Nginx loadbalancer/reverseproxy 
           \ 
            Nginx -> Gunicorn -> Flask 

要知道,每個服務器可以部署在它自己的,有服務器上自己的整個網站的能力,

這答案來自這樣一個事實,即如果不通過其他後端主機,您無法真正提供靜態文件一個服務器本身,因爲nginx實際上是該任務中最好的事情之一,所以使用它是有意義的。

+0

謝謝你的解釋。這是我的想法引導我去的地方。所以在這個設置中,我假設我應該在前端的負載平衡器/反向代理上處理緩存,以節省對上游服務器的請求。這聽起來正確嗎? –

+0

我真的不知道你會在性能上獲得什麼,它很大程度上取決於你正在開發的應用程序的類型,但nginx實際上提供了一個本地緩存機制,它可以幫助你實現帶有proxy_cache的緩存通過模式指示。再次,請記住您想要緩存的內容以及緩存它的意義(策略來判斷緩存過期等)。您甚至可以將其設置爲提供緩存數據,以防其餘基礎架構停機! –