uWSGIのポイントは何ですか?


97

私はWSGI仕様を調べており、uWSGIのようなサーバーがどのように全体像に適合するかを理解しようとしています。WSGI仕様のポイントは、nginxなどのWebサーバーを、Flaskを使用して作成するようなWebアプリケーションから分離することであることを理解しています。私が理解していないのは、uWSGIの目的です。nginxがFlaskアプリケーションを直接呼び出せないのはなぜですか?フラスコはWSGIを直接話すことができませんか?なぜuWSGIはそれらの間に入る必要があるのですか?

WSGI仕様には、サーバーとWebアプリの2つの側面があります。uWSGIはどちら側にありますか?

回答:


131

さて、私は今これを手に入れていると思います。

nginxがFlaskアプリケーションを直接呼び出せないのはなぜですか?

nginxWSGI仕様をサポートしていないためです。技術的には、nginxはWSGI必要に応じて仕様を実装できますが、実装していません。

その場合、uWSGIサーバーの目的である仕様を実装するWebサーバーが必要です。

これuWSGIは本格的なhttpサーバーであり、それ自体でうまく機能することができます。私はこれをこの容量で数回使用しましたが、うまく機能します。静的コンテンツに超高スループットが必要な場合nginxは、uWSGIサーバーの前に固執するオプションがあります。あなたがそうするとき、彼らはとして知られている低レベルのプロトコルを介して通信しますuwsgi

「なに何?!もう一つuwsgiと呼ばれるもの?!」あなたが尋ねる。ええ、それは紛らわしいです。あなたが参照uWSGIするとき、あなたはhttpサーバーについて話している。あなたはについて話すときuwsgi(すべて小文字)、あなたが話しているバイナリプロトコルことをuWSGI サーバ用途のような他のサーバに話をしますnginx。彼らはこれに悪い名前を選んだ。

興味のある人のために、私はそれについてのブログ記事をより詳細に、少しの歴史といくつかの例で書きました。


4
WerkzeugをHTTPサーバーとして使用してFlaskアプリケーションを実行することは可能ですが、本番環境に対応したセットアップではありません。uWSGIは複数の問題を解決します:* HTTP解析(Cで高速)とWSGIアプリとのインターフェース*同時実行性を高めるために複数のプロセス/スレッドでアプリを起動します* WSGIアプリのスーパーバイザーとして機能します
Sergey Panfilov 2018

@SergeyPanfilov問題は、uwsgiがフラスコをどのように処理しているかわからないことです。各プロセス/スレッドがフラスコアプリの1つのインスタンスを作成しましたか?Flask-Executorのようなフラスコでのバックグラウンドタスクの実装を見てきましたが、リクエスト内でバインドする必要があります。コンテキスト外に配置することはできません。
TomSawyer

Hasanからの回答を読んでください..正解に近いです..... httpサーバーはほとんどCで記述されており、httpリクエストをPythonバックエンドに転送できません....あなたの回答はメカニズムについて話しているだけです
過剰交換

25

この場合、NGINXはリバースプロキシとしてのみ機能し、動的ファイルはなく静的ファイルをレンダリングします。要求を受信し、アプリケーションサーバー(UWSGI)にプロキシします。

UWSGIサーバーは、WSGIインターフェイスを使用してFlaskアプリケーションをロードする役割を果たします。実際には、UWSGIにインターネットからの要求を直接リッスンさせ、必要に応じてNGINXを削除できますが、ほとんどの場合、リバースプロキシの背後で使用されます。

ドキュメントから:

uWSGIは、Webサーバーと統合するいくつかの方法をサポートしています。また、HTTPリクエストを単独で処理することもできます。

WSGIは単なるインターフェイス仕様であり、簡単に言えば、サーバーとアプリケーションの間で要求と応答を渡すために実装する必要のあるメソッドを示します。FlaskやDjangoなどのフレームワークを使用する場合、これはフレームワーク自体によって処理されます。

言い換えると、WSGIは基本的に、Pythonアプリケーション(Flask、Djangoなど)とWebサーバー(UWSGI、Gunicornなど)の間の契約です。利点は、PEP-333で述べられているように、実際には目標の1つであるWSGI仕様に準拠していることがわかっているため、わずかな労力でWebサーバーを変更できることです。

わずか数名前に- Pythonは現在、Zopeの、キホーテ、のWebware、のskunkweb、PSO、およびツイストウェブなどのWebアプリケーションフレームワーク、さまざまなを誇っ1。一般的に言って、Webフレームワークの選択は、使用可能なWebサーバーの選択を制限し、逆もまた同様であるため、この多種多様な選択は、新しいPythonユーザーにとって問題になる可能性があります。


20

従来のWebサーバーは、Pythonアプリケーションを理解していないか、実行する方法がありません。そのため、WSGIサーバーが登場します。一方、Nginxは、Python WSGIサーバーの要求を処理し、応答を返すためのリバースプロキシをサポートしています。

このリンクはあなたを助けるかもしれません:https//www.fullstackpython.com/wsgi-servers.html


4
ここには、nginx、uwsgi、flaskの3つがあります。WSGI仕様のコンテキストでは、すべてがどのように組み合わされていますか?nginxはサーバーであり、uwsgiはアプリですか、それともuwsgiはサーバーであり、flaskはアプリですか?
d512 2016

uWSGIはサーバーであり、flaskはアプリです。
Rafiqul Hasan 2016

さて、よろしければ、私自身の質問に対する私の答えをチェックして、あなたがどう思うか見てください。
d512 2016

4
WebサーバーがPythonアプリを理解しないのはなぜですか?PHPを理解できますが、Pythonや他の言語を理解できないのはなぜですか?
jdogg

0

簡単に言えば、NginxWebサーバーでCGIまたはPHPアプリケーションを実行している場合の例えを考えてみてください。Webサーバーはネイティブ形式ではこれらの形式をレンダリングしないため、php-fpmなどのそれぞれのハンドラーを使用してこれらのファイルを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.