9

I've been experimenting a bit with error logging in php-fpm and nginx since I couldn't find any good explanation on the web. Most guides said I should change catch_workers_output to yes if I want to send errors from php5-fpm back to nginx. However, during my experiments I've found that even when catch_workers_output is set to no, errors are still being logged properly by nginx.

Here's my virtualhost config:

server { server_name domain.com; return 301 http://www.domain.com$request_uri; access_log off; } server { listen 80; listen [::]:80; root /home/websites/domain.com; index index.php index.html index.htm; error_log /home/websites/logs/domain.com/error.log warn; access_log /home/websites/logs/domain.com/access.log; #switch on gzip gzip on; gzip_min_length 1100; gzip_buffers 10 32k; gzip_types text/plain application/x-javascript text/xml text/css; gzip_vary on; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~* .(gif|jpg|jpeg|png|css|js|ico)$ { expires 30d; access_log off; } error_page 404 /404.html; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one location ~ /\.ht { deny all; } } 

Here are my findings:

Exp 1 poolconf: ; catch_workers_output = no (commented out) php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on ; php_flag[display_errors] = 0 result: errors not shown in browser error written in /var/log/fpm-php.www.log error not written in virtualhost error-log in nginx errors not displayed in stderr when running php5-fpm non-daemonized Exp 2 poolconf: catch_workers_output = yes php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on php_flag[display_errors] = 0 results: no error in browser error written in /var/log/fpm-php.www.log error not written to virtualhost error-log by nginx errors not displayed in stderr when running php5-fpm non-daemonized Exp 3 poolconf: catch_workers_output = yes ; php_admin_value[error_log] = /var/log/fpm-php.www.log ; php_admin_flag[log_errors] = on php_flag[display_errors] = 0 results: no errors in browser error NOT written in /var/log/fpm-php.www.log error WRITTEN to virtualhost error-log by nginx errors DISPLAYED in stderr when running php5-fpm non-daemonized Exp 4 poolconf: ; catch_workers_output = no (commented out) ; php_admin_value[error_log] = /var/log/fpm-php.www.log ; php_admin_flag[log_errors] = on php_flag[display_errors] = 0 results: no errors in browser error NOT written in /var/log/fpm-php.www.log error WRITTEN to virtualhost error-log by nginx errors NOT displayed in stderr when running php5-fpm non-daemonized 

My question is how does PHP5-FPM send error logs to nginx even if there's no stderr output (when catch_workers_output=no) from php-fpm? I cannot find it documented anywhere.

1 Answer 1

1

When your nginx config uses php_admin_value, php_admin_flag and php_flag it is overriding values in php.ini. Commenting out the nginx settings will leave the php.ini file in charge.

Take a look in the php.ini file at the settings for display_errors, display_startup_errors, error_reporting, html_errors and log_errors. There is probably a conflict there.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.