FastCGI —Werkzeugのドキュメント

提供:Dev Guides
Werkzeug/docs/2.0.x/deployment/fastcgi
移動先:案内検索

FastCGI

lighttpdnginx などのサーバーで非常に人気のある展開セットアップはFastCGIです。 WSGIアプリケーションをそれらのいずれかで使用するには、最初にFastCGIサーバーが必要になります。

最も人気のあるものは、このガイドで使用する flup です。 必ずインストールしてください。

.fcgi ファイルの作成

まず、FastCGIサーバーファイルを作成する必要があります。 それを yourapplication.fcgi と呼びましょう:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from yourapplication import make_app

if __name__ == '__main__':
    application = make_app()
    WSGIServer(application).run()

Apacheが機能するにはこれで十分ですが、ngingxおよび古いバージョンのlighttpdでは、FastCGIサーバーと通信するためにソケットを明示的に渡す必要があります。 これを機能させるには、ソケットへのパスをWSGIServerに渡す必要があります。

WSGIServer(application, bindAddress='/path/to/fcgi.sock').run()

パスは、サーバー構成で定義したものとまったく同じパスである必要があります。

yourapplication.fcgi ファイルをもう一度見つけられる場所に保存します。 / var / www / yourapplication または同様のものにそれを置くことは理にかなっています。

サーバーが実行できるように、そのファイルに実行可能ビットを設定してください。

# chmod +x /var/www/yourapplication/yourapplication.fcgi

lighttpdの設定

lighttpdの基本的なFastCGI構成は次のようになります。

fastcgi.server = ("/yourapplication.fcgi" =>
    ((
        "socket" => "/tmp/yourapplication-fcgi.sock",
        "bin-path" => "/var/www/yourapplication/yourapplication.fcgi",
        "check-local" => "disable",
        "max-procs" -> 1
    ))
)

alias.url = (
    "/static/" => "/path/to/your/static"
)

url.rewrite-once = (
    "^(/static.*)$" => "$1",
    "^(/.*)$" => "/yourapplication.fcgi$1"

FastCGI、エイリアス、および書き換えモジュールを有効にすることを忘れないでください。 この構成は、アプリケーションを / yourapplication にバインドします。

FastCGIおよびPython の詳細については、Lightyのドキュメントを参照してください。


nginxの構成

デフォルトでは一部のFastCGIパラメータが適切に転送されないため、nginxにFastCGIアプリケーションをインストールするのは少し注意が必要です。

nginxの基本的なFastCGI構成は次のようになります。

location /yourapplication/ {
    include fastcgi_params;
    if ($uri ~ ^/yourapplication/(.*)?) {
        set $path_url $1;
    }
    fastcgi_param PATH_INFO $path_url;
    fastcgi_param SCRIPT_NAME /yourapplication;
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

この構成は、アプリケーションを / yourapplication にバインドします。 PATH_INFO と SCRIPT_NAME の計算方法を理解する必要がないため、URLルートに含める方が少し簡単です。

location /yourapplication/ {
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

NginxはFastCGIアプリをロードしないため、自分でロードする必要があります。 そのための init.d スクリプトを作成するか、画面セッション内で実行することができます。

$ screen
$ /var/www/yourapplication/yourapplication.fcgi

デバッグ

FastCGIデプロイメントは、ほとんどのWebサーバーでデバッグするのが難しい傾向があります。 多くの場合、サーバーログからわかるのは、「ヘッダーの終わりが早すぎる」という行に沿ったものだけです。 アプリケーションをデバッグするために、アプリケーションが壊れた理由を実際に理解できる唯一のことは、正しいユーザーに切り替えて、アプリケーションを手動で実行することです。

この例では、アプリケーションの名前が application.fcgi であり、Webサーバーユーザーが www-data であると想定しています。

$ su www-data
$ cd /var/www/yourapplication
$ python application.fcgi
Traceback (most recent call last):
  File "yourapplication.fcg", line 4, in <module>
ImportError: No module named yourapplication

この場合、エラーは「yourapplication」がPythonパス上にないことのようです。 一般的な問題は次のとおりです。

  • 使用されている相対パス。 現在の作業ディレクトリに依存しないでください
  • Webサーバーによって設定されていない環境変数に依存するコード。
  • 使用されているさまざまなPythonインタープリター。