Nginx 中的不同 PHP 配置

Nginx 中的不同 PHP 配置

我有一个运行多个服务器(虚拟主机)的 Web 服务器,使用 nginx 和 fastcgi 传递到 unix 套接字。

我想要完成的是 beta.example.com 和 live.example.com 的设置,其中实时站点已关闭 error_reporting(但仍记录到文件),而在 beta 站点上 error_reporting 处于打开状态。

因此,使用 Apache 我会执行以下操作:

<VirtualHost *:80>
    ServerName beta.example.com

    [...]

    php_flag display_errors on
    php_flag display_startup_errors on
    php_value error_reporting -1

    [...]
</VirtualHost>

在谷歌搜索时,我没有找到任何可以使用 fastcgi 将此类参数传递给 PHP 的地方。有人知道怎么做吗?

目前的配置是(简化):

server {
    server_name beta.example.com;
    [...]
    fastcgi_pass unix:/var/run/nginx/php-fastcgi.sock;
    fastcgi_index index.php;
}

答案1

您可以使用以下语法将这些选项从 nginx 传递给 PHP fastcgi:

fastcgi_param PHP_FLAG "display_errors=on \n display_startup_errors=on";
fastcgi_param PHP_VALUE "error_reporting=-1";

\n请注意,传递的选项之间必须有换行符 ( )。

答案2

由于某种原因,PHP_FLAG 对我没有效果,但突然这一行起作用了:

fastcgi_param   PHP_VALUE       "display_errors=on \n display_startup_errors=on \n error_reporting = E_ALL \n error_log = /var/log/nginx/foo-bar.error.log";

nginx/1.11.6,php/php-fpm 5.6.31-4

答案3

您可以使用另一个套接字运行另一个 php-fastcgi 进程,并将您帖子中的配置片段与新套接字一起使用。另一个优点是隔离性更强,例如,您可以在没有访问权限来干扰生产网站的用户下运行第二个 php 进程。

nginx 端看起来如下:

server {
    server_name production.example.com;
    [...]
    fastcgi_pass unix:/var/run/nginx/php-fastcgi.sock;
    fastcgi_index index.php;
}
server {
    server_name beta.example.com;
    [...]
    fastcgi_pass unix:/var/run/nginx/php-fastcgi-beta.sock;
    fastcgi_index index.php;
}

php 端取决于您如何启动 php fastcgi 进程。

相关内容