読者です 読者をやめる 読者になる 読者になる

FastCGI

nginx

今まで「nginxでFastCGIを動かすのは面倒だな」と思っていたためnginxを敬遠してしたけど、そうでもないみたい。面倒なのは、nginx 0.5系に限った話。

以下は、nginx 0.5系でDjangoを動かす例。

fastcgi_paramディレクティブで延々とパラメータを設定しているところが、嫌だったけれども、0.6系から?fastcgi_paramsというファイルが配布物に含まれるようになったので、includeするだけでよくなった。(もちろん0.5系でも自分でincludeファイルを作れば同じことはできる。)

以下は、nginx 0.6系でDjangoを動かす例。

0.6系ならば、最小限、以下の設定で、FastCGIを動かすことができるはず。

http {
        server {
                listen 80;
                location / {
                        include /etc/nginx/fastcgi_params;
                        fastcgi_pass 127.0.0.1:3000;
                        fastcgi_param PATH_INFO $fastcgi_script_name;
                }
        }
}

fastcgi_passは明示的に設定する必要があり、さらにPATH_INFOも設定が必要(これはDjangoだけの事情かも)。他は、fastcgi_paramsをincludeすればよい。

fastcgi_pass_header

ドキュメントには何も書いていないけど、他のモジュールのディレクティブから推測するならば、「FastCGIが返したヘッダーをそのままクライアントに返す」というディレクティブだと思う。

location / {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:3000;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_pass_header Authorization;
}

ならば、FastCGIが返したAuthorizationを除去せずに、そのままクライアントに返す。
ただ、逆の操作を行うディレクティブのfastcgi_hide_headerのところで、「デフォルトでは、StatusとX-Accel-*ヘッダーをクライアントに渡さない」と書いてあるので、StatusとX-Accel-*以外はすべてクライアントに返されるというのが予想される動作ではないか?(未検証)

fastcgi_store, fastcgi_store_access

ドキュメントを読むとだいたい理解できるが、細かい動作がちょっと良く分からないので後で試してみる。