2016-07-26 5 views
12

私はWSGI specificationを見ていて、どのようにサーバーがuWSGIのような画像に収まるかを考えようとしています。 WSGI仕様のポイントは、nginxのようなWebサーバーを、Flaskを使って書いたようなWebアプリケーションから分離することです。私が理解していないのは、uWSGIのためのものです。なぜnginxは私のFlaskアプリケーションを直接呼び出せないのですか?フラスコは直接WSGIを話すことはできませんか?なぜそれらの間にuWSGIが入る必要がありますか?uWSGIのポイントは何ですか?

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

答えて

10

さて、私は今、これを取得すると思います。 APIの両側を実装してWSGIミドルウェア 、があるかもしれない、サーバーとアプリケーション間の

:私はWikipedia artileで以下の説明をお読みください。サーバー は、クライアントから要求を受け取り、それをミドルウェアに転送します。 処理後、アプリケーションに要求を送信します。 アプリケーションの応答は、ミドルウェアによってサーバー に転送され、最終的にはクライアントに転送されます。

具体的には言いませんが、私はuWSGIがこれらのミドルウェアの1つであると推測しています。私の理解は、Flask(または使用したい他のフレームワーク)がWSGI仕様のアプリケーション側の実装方法を具体的に知る必要がないように、uWSGIがFlaskアプリケーションのアダプタとして機能することです。

私自身の質問に答えるために、uWSGIとFlaskは一緒にWSGIのアプリ側を構成し、nginxはWebサーバー側です。

あなたはuWSGIをWebサーバーとして実行することもできますが、その場合は両方の役割を果たしますが、ほとんどの人がそうするでしょう。

興味のある方は、詳しい内容、少しの歴史、およびいくつかの例を添えて、blog articleを書きました。

+0

WerkzeugをHTTPサーバーとして使用してFlaskアプリケーションを実行することは可能ですが、実稼動準備ができていません。 uWSGIは複数の問題を解決: *はHTTP *(Cで速い)解析とWSGIアプリ とのインターフェースは、より良好な同時実行 ための複数のプロセス/スレッドにアプリ* WSGIアプリの監督として作用起動 –

6

伝統的なWebサーバーは、Pythonアプリケーションを理解する方法も、Pythonアプリケーションを実行する方法もありません。それでWS​​GIサーバーが入ってくるのです。一方、Nginxは要求を処理してPython WSGIサーバーの応答を返すためにリバースプロキシをサポートしています。

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

+0

ここでは、nginx、uwsgi、およびフラスコ。それはWSGI仕様の文脈でどのように適合しますか? nginxはサーバでuwsgiはアプリかuwsgiでサーバはフラスコですか? – d512

+0

uWSGIはサーバーで、フラスコはappです。 –

+0

あなたが気にしないなら、自分の質問に対する私の答えをチェックし、あなたの考えを見てください。 – d512

0

この場合、NGINXはリバースプロキシとしてのみ機能し、要求を受け取り、それらをアプリケーションサーバー(UWSGI)にプロキシします。

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

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

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

つまり、WSGIは基本的にPythonアプリケーション(Flask、Djangoなど)とWebサーバー(UWSGI、Gunicornなど)の間の契約です。メリットは、Webサーバーをほとんど変更せずに変更できることです。これは、PEP-333に記載されているように、実際にはWSGI仕様に準拠していることを示しています。名前にわずか数[1] -

Pythonは現在、Zopeの、キホーテ、のWebware、のskunkweb、PSO、およびツイストウェブなどのWebアプリケーションフレームワーク、さまざまなを誇っています。一般的に言えば、Webフレームワークの選択によって、使用可能なWebサーバーの選択肢が制限され、逆もまた同様です。

関連する問題