Недавно я экспериментировал с переходом от локального ведения журнала на основе файлов в приложении PHP к отправке ошибок PHP через стандартный вывод, чтобы они выводились вместе с другими журналами в настройке докера. Это работает нормально, если вы установите журнал ошибок
место для /dev/стандартный вывод
затем я вижу ошибки из PHP через хвостовые журналы докеров. Однако эти же ошибки также появляются в контейнере nginx, как показано ниже через «FastCGI, отправленный в stderr»:
docker-compose-nginx-phpfpm-php-fpm-1 | ВНИМАНИЕ: сообщение PHP: тест
docker-compose-nginx-phpfpm-php-fpm-1 | 172.18.0.3 - 18 января 2022:20:00:20 +0000 "GET /index.php" 200
docker-compose-nginx-phpfpm-web-1 | 18.01.2022 20:00:20 [ошибка] 32#32: *18 FastCGI отправлено в stderr: «Сообщение PHP: тест» при чтении заголовка ответа от восходящего потока, клиент: 172.18.0.1, сервер: phpfpm.local, запрос : "GET / HTTP/1.1", восходящий поток: "fastcgi://172.18.0.2:9000", хост: "localhost:8080"
Для ясности:
Журнал контейнера PHP
docker-compose-nginx-phpfpm-php-fpm-1 | ВНИМАНИЕ: сообщение PHP: тест
Журнал контейнера Nginx
docker-compose-nginx-phpfpm-web-1 | 18.01.2022 20:00:20 [ошибка] 32#32: *18 FastCGI отправлено в stderr: «Сообщение PHP: тест» при чтении заголовка ответа от восходящего потока, клиент: 172.18.0.1, сервер: phpfpm.local, запрос : "GET / HTTP/1.1", восходящий поток: "fastcgi://172.18.0.2:9000", хост: "localhost:8080"
Что тут происходит? это ожидаемое поведение?
Это результат очень простой и стандартной настройки php-fpm/nginx с таким docker-compose.yml:
версия: "3.9"
Сервисы:
веб:
изображение: nginx: последний
порты:
- "8080:80"
тома:
- ./src:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
ссылки:
- PHP-FPM
php-fpm:
изображение: php:8-fpm
тома:
- ./src:/var/www/html
default.conf, например:
сервер {
индекс index.php index.html;
имя_сервера phpfpm.local;
журнал_ошибок /var/log/nginx/error.log;
журнал_доступа /var/log/nginx/access.log;
корень /var/www/html;
расположение ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
и index.php, например:
<?php
ini_set('display_errors', 'выключено');
ini_set('error_log', '/dev/stdout');
error_log('тест');
эхо phpinfo();