Назад | Перейти на главную страницу

Различные PHP-конфиги в Nginx

У меня есть веб-сервер, на котором запущено несколько серверов (виртуальных хостов), использующих nginx и fastcgi, переходящие в unix-сокет.

Я хочу выполнить настройку с beta.example.com и live.example.com, где на действующем сайте error_reporting отключен (но по-прежнему регистрируется в файле), а на бета-сайте 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>

При поиске в Google я не нашел ничего, где можно было бы передать такие параметры PHP с помощью fastcgi. Кто-нибудь знает как это сделать?

Конфигурация прямо сейчас (упрощенная):

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

Вы можете передать эти параметры в PHP fastcgi из nginx с помощью следующего синтаксиса:

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

Обратите внимание на новую строку (\n), который должен быть между переданными параметрами.

Вы можете запустить другой процесс 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.

По какой-то причине PHP_FLAG for не повлиял на меня, но вдруг эта строка сработала:

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