私は WSGI仕様 を見ており、 WSGI のようなサーバーがどのように画像に適合するのかを理解しようとしています。 WSGI仕様のポイントは、 Flask を使用して記述するようなWebアプリケーションからnginxなどのWebサーバーを分離することであると理解しています。私が理解していないのは、uWSGIの目的です。 nginxがFlaskアプリケーションを直接呼び出せないのはなぜですか? flaskはWSGIに直接話せませんか?なぜuWSGIがそれらの間に入る必要があるのですか?
WSGI仕様には、サーバーとWebアプリの2つの側面があります。 uWSGIはどちら側にありますか?
さて、私は今これを手に入れると思います。
NginxがFlaskアプリケーションを直接呼び出せないのはなぜですか?
nginx
はWSGI仕様をサポートしていないためです。技術的には、nginxは必要に応じてWSGI
仕様を実装できますが、実装していません。
その場合、仕様を実装するWebサーバーが必要です。これはuWSGI
サーバーの目的です。
uWSGI
は完全に機能するhttpサーバーであり、それ自体で十分に機能します。この容量で何度か使用しましたが、うまく機能します。静的コンテンツに非常に高いスループットが必要な場合は、nginx
サーバーの前にuWSGI
を固定するオプションがあります。実行すると、uwsgi
として知られる低レベルプロトコルを介して通信します。
"何が!?uwsgiと呼ばれる別のこと?!"尋ねます。うん、分かりにくい。 uWSGI
を参照すると、httpサーバーについて話していることになります。 uwsgi
(すべて小文字)について話すときは、 バイナリプロトコル がuWSGI
servernginx
などの他のサーバーとの通信に使用します。彼らはこれに悪い名前を付けました。
興味のある人のために、私は ブログ記事 について、より詳細な説明、少しの歴史、およびいくつかの例を書いた。
従来のWebサーバーは、Pythonアプリケーションを理解することも、実行する方法もありません。 WSGIサーバーが登場するのはそのためです。一方、NginxはPython WSGIサーバーの要求を処理し、応答を返すリバースプロキシをサポートしています。
このリンクはあなたを助けるかもしれません: https://www.fullstackpython.com/wsgi-servers.html
この場合のNGINXはリバースプロキシとしてのみ機能し、リクエストを受信してアプリケーションサーバー(UWSGI)にプロキシします。
UWSGIサーバーは、WSGIインターフェースを使用してFlaskアプリケーションをロードします。実際には、UWSGIがインターネットからのリクエストを直接リッスンし、必要に応じてNGINXを削除することができますが、主にリバースプロキシの背後で使用されます。
docs から:
uWSGIは、Webサーバーと統合するいくつかの方法をサポートしています。また、HTTP要求を単独で処理することもできます。
WSGIは単なるインターフェイス仕様であり、簡単に言えば、サーバーとアプリケーションの間で要求と応答を渡すために実装する必要があるメソッドを示します。 FlaskやDjangoなどのフレームワークを使用する場合、これはフレームワーク自体によって処理されます。
言い換えれば、WSGIは基本的にpythonアプリケーション(Flask、Djangoなど)とWebサーバー(UWSGI、Gunicornなど)の間の契約です。利点は、 PEP-3 に記載されているように、実際には目標の1つであるWSGI仕様に準拠していることがわかっているため、Webサーバーを簡単に変更できることです。
Pythonは現在、Zope、Quixote、Webware、SkunkWeb、PSO、Twisted Webなど、さまざまなWebアプリケーションフレームワークを誇っています。一般的に言えば、Webフレームワークの選択は使用可能なWebサーバーの選択を制限し、逆もまた同様であるため、この幅広い選択肢は新しいPythonユーザーにとって問題になる可能性があります。