У меня есть веб-сервер, на котором запущено несколько серверов (виртуальных хостов), использующих 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