2017-08-15 7 views
0

Nginxについてもっと学びました。以前は同じシステム上に1つのWebアプリケーションを提供していましたが、別々にスケールアウトしたいと思っていました。私はFlaskアプリケーションを実行している2 GunicornサーバーでNginxロードバランサをセットアップすることができました。私の質問は、これらのGunicornサーバーのそれぞれからNginxの静的なサービス機能を使用するように設定する方法です。複数のWSGIサーバーから静的ファイルを提供するNginxロードバランサ

私は3つのバーチャルプライベートサーバを持っていますが、私は払っています。ナンバー1はロードバランサ/リバースプロキシとして2番と3番のWebアプリケーションを複製するリクエストをルーティングするNginxを持っています。私は静的なディレクトリを含めて、アプリケーションを実行するために必要なものすべてでこれらを単独で欲しいと思っています。したがって、ロードバランサ/リバースプロキシに静的ディレクトリを持たせる代わりに、すべてWebアプリケーションディレクトリ構造に含まれています。

現在、それは次のようになります。

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

私は静的なディレクトリにアクセスし、nginxのロードバランサー/リバースプロキシに静的ファイルを返すために、各Gunicornサーバー上でnginxのを配置する必要がありますか?したがって、次のようになります:

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

多分私はこれをすべて間違っており、上記は過度なことであり、パフォーマンスが向上しない可能性があります。もしそうなら、ロード・バランシングとキャッシングを1つのメイン・エントリー・ポイントで行い、Gunicornにルーティングするための優れた構造は何ですか?

私が本当に望むのは、Web Appのすべてをインストールしたサーバーを用意して、必要に応じてさらに追加して、ロードバランサをこれらのアップストリームサーバーに向けるだけだということです。

提案が役に立ちます。一日の終わりの前にnginxのを、これは生産上だろうと仮定し、限りgunicornの私の理解が私を取るとして、あなたは静的なファイルを提供するためにユニコーン自体を使用してはならない、

+0

フィードバックに感謝します。私はあなたの提案をチェックアウトします。私はその展開が開発に合っていることを賞賛します。あなたのウェブアプリケーションは、ウェブサーバーなしでは何もできません。はい私は静的なコンテンツ(css、javascript、htmlコンテンツ)に特化していますが、これはすべてのコードです。 –

+0

Asdあなたは、プログラミングとは関係ない設定からトラブルシューティングまで多くのAnaconda関連の質問に答えますが、パッケージ管理のためのソフトウェアです。これらの質問は投票されていないようです。 –

答えて

0

システム全体がロードバランサ/ revプロキシとして機能し、受信した要求を一連の上流サーバーに配信するようにサーバーを構成することができます。

ここで上流サーバーについては、

Nginx -> Gunicorn -> Flask 

特定の要求が静的ファイルディレクトリから提供され、他のものがgunicornサーバに直接接続する場合、

最後に、アップストリームサーバをプールに展開し、それらをRevプロキシに追加しますconfに、

これを、それが

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

は、各サーバが独自に展開し、サーバ自身でサイト全体の容量を持つことができることに注意してください(あなたが言及しただけのように)このようになりますので、答えは、通過しないと他のバックエンドホストからの静的ファイルを実際に提供できないという事実から来ますnginxは文字通りそのタスクの最善のものの1つで、それを使用するのは理にかなっています。

+0

良い説明をいただきありがとうございます。これは私の考えが私を導く場所でした。したがって、このセットアップでは、上流のサーバーへの要求を保存するためにフロントのロードバランサ/リバースプロキシのキャッシュを処理する必要があると仮定します。それは正しいと思いますか? –

+0

あなたはパフォーマンスにおいて何が得られるか分かりませんし、開発しているアプリケーションの種類に大きく依存しますが、実際にはnginxはproxy_cacheでキャッシュスルースキーマを実装するのに役立つネイティブキャッシュメカニズムを提供します指令。ここでも、キャッシュしたいものとキャッシュする方法(キャッシュが古くなったとみなすポリシーなど)を覚えておいてください。他のインフラストラクチャがダウンした場合に備えて、キャッシュされたデータを提供するように設定することもできます。 –

関連する問題