error_reporting
をnginx.conf
に次のように設定できます。
fastcgi_param PHP_VALUE error_reporting=E_ALL;
しかし、これを1つのサーバーブロックで行うと、他のすべてのサーバーブロックにも影響しますか?すべてのサーバーブロックのPHP設定を同時に変更する必要がありますか?
サーバー上のすべてのホストが独自のPHP-FPMプールで実行されている場合、1つのnginxホストにfastcgi_param PHP_VALUE ...
を追加しても、他のホストには影響しません。
一方、すべてのnginx
ホストが1つのPHP-FPMプールを使用する場合は、ホストごとにPHP_VALUE
を指定する必要があります(そのうちの1つにはerror_reporting=E_ALL
、他のホストには空の値)。 fastcgi_param
は指定されている場合はPHP_VALUE
を渡し、指定されていない場合は渡さないため。他のホストで明示的にPHP_VALUE=error_reporting=E_ALL
を設定しない限り、しばらくするとすべてのワーカーにPHP_VALUE
が割り当てられます。
さらに、fastcgi_param PHP_VALUE ...
宣言は相互にオーバーライドします(最後の宣言が有効になります)。
再現する手順:
apt install nginx php5-fpm
/etc/nginx/sites-enabled/hosts.conf
:
server {
server_name s1;
root /srv/www/s1;
location = / {
include fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param PHP_VALUE error_reporting=E_ERROR;
}
}
server {
server_name s2;
root /srv/www/s1;
location = / {
include fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
s1
、s2
を/etc/hosts
に追加します
pm.max_children
でpm
をstatic
に、1
を/etc/php5/fpm/pool.d/www.conf
に変更します。
cat /srv/www/s1/index.php
:
<?php var_dump(error_reporting());
systemctl restart php5-fpm && systemctl restart nginx
curl s2 && curl s1 && curl s2
int(22527)
int(1)
int(1)
サーバーごとにPHP_VALUE
を設定できます。これは、そのサーバーにのみ影響します。 PHPを使用するすべてのサーバーに等しいPHP_VALUE
が必要な場合は、インクルードファイルを使用してください。
たとえば(debian)、create /etc/nginx/conf.d/php_settings.cnf
:
fastcgi_param PHP_VALUE "upload_max_filesize=5M;\n error_reporting=E_ALL;";
次に、このファイルを必要なサーバーまたは場所の構成に含めます。
server {
...
location ~ \.php$ {
...
include /etc/nginx/conf.d/php_settings.cnf;
}
...
}