nginx:fastcgi_paramsとfastcgi.confはどう使えばよいのか?
そもそも、fastcgi_paramsとfastcgi.confは何がどう違うのか?
code:console
$ diff -u fastcgi_params fastcgi.conf
--- fastcgi_params 2021-05-29 23:21:37.000000000 +0900
+++ fastcgi.conf 2021-05-29 23:21:37.000000000 +0900
@@ -1,4 +1,5 @@
+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;
SCRIPT_FILENAME の定義の有無が違う。
fastcgi_params には定義なし
fastcgi.conf には定義あり
fastcgi.conf は後から出てきた。
fastcgi_params は古くからあるが、これを書き換えると誤動作をする可能性があるため残された。つまり、これから利用するシステムでは、fastcgi.conf を使うのが妥当。
fastcgi_param ディレクティブは後勝ち。
このため、include fastcgi_params; を書いた後、fastcgi_param SCRIPT_FILENAME を書けば fastcgi.conf と同一になる。
/etc/nginx/fastcgi_params, /etc/nginx/fastcgi.conf はシステムでのデフォルト値として扱い、原則として書き換えるべきではない。
書き換えたいならば、サイト用の設定の中で個別に上書きする。
システムグローバルに設定したい場合は書き換えてもよい。
PATH_INFO, PATH_TRANSLATED を設定すべき?
なぜか fastcgi_param, fastcgi.conf には含まれていない。
アプリケーションに依存。
試してダメなら追加を検討。多分なくても大丈夫。
Apache 2 では PATH_INFO は無効になっている。
PATH_INFO は URI エンコード(パーセントエンコーディング)されていないので、これを解析するのは望ましくない。
PATH_TRANSLATED は PATH_INFO がある場合に設定されるべきものになっている。
PATH_TRANSLATED は SERVER_FILENAME と実質的に同じ。
後勝ちなので、include fastcgi.conf をした後に、fastcgi_param で上書きする。
code:nginx.conf
server {
...
include fastcgi.conf;
fastcgi_param YOUR_SPECIAL_VAR ....
}
参考
nginxのfastcgi_paramsとfastcgi.confの違い
nginx fastcgi_params を include する箇所、割と皆間違ってるよね?
CGI1.1で、HTTP(S)サーバからCGIスクリプトに渡される変数