如何在nginx配置中为一个主机设置php ini设置

x-y*_*uri 7 php config nginx

一个可以设置error_reportingnginx.conf像这样:

fastcgi_param   PHP_VALUE   error_reporting=E_ALL;
Run Code Online (Sandbox Code Playgroud)

但是,如果我在一个服务器块中执行此操作,它是否会影响所有其他服务器块?我应该同时更改所有服务器块中的php设置吗?

x-y*_*uri 7

如果服务器上的每台主机都在自己的 PHP-FPM 池中运行,那么添加fastcgi_param PHP_VALUE ...到一台 nginx 主机不会影响其他主机。

另一方面,如果所有nginx主机都使用一个 PHP-FPM 池,您应该PHP_VALUE为您拥有的每台主机指定(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;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加s1,s2/etc/hosts

  4. 更改pmstaticpm.max_children1/etc/php5/fpm/pool.d/www.conf

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

    <?php var_dump(error_reporting());
    
    Run Code Online (Sandbox Code Playgroud)
  6. systemctl restart php5-fpm && systemctl restart nginx

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

    int(22527)
    int(1)
    int(1)
    
    Run Code Online (Sandbox Code Playgroud)


Ale*_*gin 6

您可以设置PHP_VALUE每台服务器,这只会影响该服务器.如果您PHP_VALUE的所有服务器都需要使用PHP,请使用包含文件.

例如(debian),创建/etc/nginx/conf.d/php_settings.cnf:

fastcgi_param PHP_VALUE "upload_max_filesize=5M;\n error_reporting=E_ALL;";
Run Code Online (Sandbox Code Playgroud)

然后将此文件包含在您需要的任何服务器或位置配置中:

server {
  ...
  location ~ \.php$ {
    ...
    include /etc/nginx/conf.d/php_settings.cnf;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 错了,请参阅[我的答案](http://stackoverflow.com/a/32104484/52499)。`php-fpm` 维护 `php` 工作进程池,这些进程不会在每个请求时重新启动。这就是 FastCGI 的意义所在。 (2认同)