M-am jucat recent cu trecerea de la înregistrarea locală bazată pe fișiere într-o aplicație PHP, la împingerea erorilor PHP prin stdout, astfel încât acestea să fie afișate împreună cu celelalte jurnale într-o configurare docker. Acest lucru funcționează bine, dacă setați error_log
locație către /dev/stdout
apoi văd erori de la PHP prin jurnalele de docker. Cu toate acestea, aceleași erori apar și în containerul nginx, ca mai jos prin „FastCGI trimis în stderr”:
docker-compose-nginx-phpfpm-php-fpm-1 | ANUNȚ: mesaj PHP: test
docker-compose-nginx-phpfpm-php-fpm-1 | 172.18.0.3 - 18/Ian/2022:20:00:20 +0000 „GET /index.php” 200
docker-compose-nginx-phpfpm-web-1 | 2022/01/18 20:00:20 [eroare] 32#32: *18 FastCGI trimis în stderr: „Mesaj PHP: test” în timp ce citiți antetul răspunsului din amonte, client: 172.18.0.1, server: phpfpm.local, cerere : „GET / HTTP/1.1”, în amonte: „fastcgi://172.18.0.2:9000”, gazdă: „localhost:8080”
Pentru claritate:
Jurnal de containere PHP
docker-compose-nginx-phpfpm-php-fpm-1 | ANUNȚ: mesaj PHP: test
Jurnalul containerului Nginx
docker-compose-nginx-phpfpm-web-1 | 2022/01/18 20:00:20 [eroare] 32#32: *18 FastCGI trimis în stderr: „Mesaj PHP: test” în timp ce citiți antetul răspunsului din amonte, client: 172.18.0.1, server: phpfpm.local, cerere : „GET / HTTP/1.1”, în amonte: „fastcgi://172.18.0.2:9000”, gazdă: „localhost:8080”
Ce se petrece aici? acesta este comportamentul așteptat?
Acesta este rezultatul unei configurații php-fpm/nginx foarte de bază și standard cu un docker-compose.yml ca acesta:
versiunea: "3.9"
Servicii:
web:
imagine: nginx:latest
porturi:
- „8080:80”
volume:
- ./src:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
link-uri:
- php-fpm
php-fpm:
imagine: php:8-fpm
volume:
- ./src:/var/www/html
un default.conf ca:
Server {
index index.php index.html;
nume_server phpfpm.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
rădăcină /var/www/html;
locație ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
și un index.php ca:
<?php
ini_set('display_errors', 'off');
ini_set('error_log', '/dev/stdout');
error_log('test');
echo phpinfo();