web-dev-qa-db-ja.com

1つのホストのnginxconfigでphpini設定を設定する方法

error_reportingnginx.confに次のように設定できます。

fastcgi_param   PHP_VALUE   error_reporting=E_ALL;

しかし、これを1つのサーバーブロックで行うと、他のすべてのサーバーブロックにも影響しますか?すべてのサーバーブロックのPHP設定を同時に変更する必要がありますか?

10
x-yuri

サーバー上のすべてのホストが独自の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 ...宣言は相互にオーバーライドします(最後の宣言が有効になります)。

再現する手順:

  1. apt install nginx php5-fpm

  2. /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;
        }
    }
    
  3. s1s2/etc/hostsに追加します

  4. pm.max_childrenpmstaticに、1/etc/php5/fpm/pool.d/www.confに変更します。

  5. cat /srv/www/s1/index.php

    <?php var_dump(error_reporting());
    
  6. systemctl restart php5-fpm && systemctl restart nginx

  7. curl s2 && curl s1 && curl s2

    int(22527)
    int(1)
    int(1)
    
6
x-yuri

サーバーごとに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;
  }
  ...
}
9