2017-02-16 202 views
1

我遇到了一個奇怪的行爲。我正在用PHP-FPM運行NGINX。啓用PHP錯誤日誌時NGINX錯誤日誌被禁用

當我使PHP錯誤日誌中php.ini

error_log = /var/www/logs/php-scripts.error.log 
log_errors = on 

錯誤日誌寫入預期:

... 
[15-Feb-2017 19:35:28 Etc/UTC] PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in /var/www/html/index.php on line 7 

然而,在同一時間在我的NGINX配置錯誤日誌虛擬主機根本不寫入(這是NGINX配置片段):

server { 
    listen 80; 
    server_name vhost.com; 

    access_log /var/log/nginx/access.log main; 
    error_log /var/log/nginx/error.log; <- this is always empty 
} 

現在讓我吃驚,當我禁用錯誤日誌中php.ini

; error_log = /var/www/logs/php-scripts.error.log <-- commented out 
log_errors = on 

Nginx的錯誤日誌寫入

... 
2017/02/16 12:01:44 [error] 13#13: *27 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in /var/www/html/index.php on line 7" while reading response header from upstream, client: 172.19.0.2, server: domain.com, request: "GET/HTTP/1.1", upstream: "fastcgi://172.19.0.3:9000", host: "domain.com:8080" 

我不明白這種行爲在所有。兩個測井系統之間的干擾源是什麼?爲什麼我不能在php.ini中啓用錯誤日誌,並同時將NGINX的錯誤日誌寫入?目前它是一個或另一個。有沒有可能解決這個問題?

回答

2

PHP向日志文件,syslog(3)或stderr報告錯誤,具體取決於是否以及如何設置error_log。詳情請參閱this document

nginx將記錄通過FastCGI stderr流接收到的消息。

所以,這並不是很奇怪的行爲。

+0

如果我理解正確,重點是,如果我將PHP錯誤重定向到文件,錯誤不會發送到標準錯誤,因此,nginx將不會有任何流讀取,其錯誤日誌將爲空。 – luqo33

+0

是的。完全正確。 –