nginxをインストールすると/etc/nginx以下に設定ファイルが作成される。
その中にfastcgi_paramsとfastcgi.confがあるがこれらは中身がほぼ同じ。
違いや意図を調べてみた。
fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi.conf
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
違い
fastcgi.confの方は fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
の記述がある。
他は同じ。
nginxの歴史
0.6系?のころ、nginxの設定はよくこうなっていた
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/foo$fastcgi_script_name;
fastcgi_pass backend;
}
その後、コミュニティのドキュメント化が発達にするにつれて、rootをハードコーディングするのではなく$document_rootを使う人と古い設定スタイルを使う人の二分化が起こりました。
fastcgi_paramは配列ディレクティブと呼ばれ、複数設定することができます。設定が重複した場合はnginxはそのまま複数の値をfastcgiに私、どの値を使うかはfastcgiの実装によります。(多くの場合最後の値が使用される。たぶん)
この挙動により、fastcgi_paramsの中にSCRIPT_FILENAMEを定義すると混乱を招く可能性があるため、定義することができませんでした。
その後、0.3.30リリースでfastcgi.confが追加されました。
fastcgi.confにはSCRIPT_FILENAMEの定義があり、$document_rootが使用されています。