PHP-FPM이 오류 로그에 기록하지 않습니다


161

방금 nginx + php-fpm 서버를 설치했습니다. PHP-FPM이 로그에 오류를 쓰지 않는 것을 제외하고는 모든 것이 잘 보입니다.

fpm.conf

[default]
listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webusr
listen.group = webusr
listen.mode = 0666
user = webusr
group = webusr
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /php/fpm/status
ping.path = /php/fpm/ping
request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/default/slow.log
chroot = /var/www/sites/webusr
catch_workers_output = yes
env[HOSTNAME] = mapsvr.mapking.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/default/error.log
php_admin_flag[log_errors] = on

nginx.conf

server
{
  listen        80 default_server;
  server_name   _;

  charset       utf-8;
  access_log    /var/log/nginx/access.log rest;

  include       conf.d/drops.conf.inc;

  location      /
  {
    root        /var/www/sites/webusr/htdocs;
    index       index.html index.htm index.php;
  }

  # pass the PHP scripts to FastCGI server listening on socket
  #
  location      ~ \.php$
  {
    root           /var/www/sites/webusr/htdocs;
    include        /etc/nginx/fastcgi_params;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /htdocs/$fastcgi_script_name;
    if (-f $request_filename)
    {
      fastcgi_pass   unix:/var/run/php-fpm/default.sock;
    }
  }

  location      = /php/fpm/status
  {
    include        /etc/nginx/fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass   unix:/var/run/php-fpm/default.sock;
  }

  location      = /php/fpm/ping
  {
    include        /etc/nginx/fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass   unix:/var/run/php-fpm/default.sock;
  }

  # redirect server error pages to the static page /50x.html
  #
  error_page    500 502 503 504  /50x.html;
  location      = /50x.html
  {
    root        /usr/share/nginx/html;
  }
}

잘못된 PHP 스크립트를 만들어 실행했으며 웹 브라우저에서 오류 출력이 표시됩니다. 또한 nginx 오류 로그에는 동일한 메시지와 함께 fpm의 stderr 출력이 표시됩니다. 사용자가 지정된 로그 폴더에 대한 쓰기 권한 (777도 시도했습니다)을 가지고 있는지 확인했습니다. 지정된 error.log 파일조차 php-fpm에 의해 성공적으로 생성되었습니다. 그러나 PHP 스크립트에서 어떤 엄청난 오류가 발생하더라도 로그 파일은 항상 비어 있습니다.

무슨 일이야?

[나중에 그 이유를 꽤나 발견했다]

허가였습니다. 사이트의 사용자로 소유자를 변경하여 문제를 해결했습니다.


문제가있는 PHP 버전은 v5.3.9와 v5.3.14 사이입니다 (오늘처럼). v5.3.15 및 v5.4.5부터 작동해야합니다.
Anton Babenko

농가에서 hhvm + php-fpm을 사용하는 경우 로그는 tail /var/log/hhvm/error.log에 있습니다
astroanu

여기에도 같은 문제가 있습니다. 액세스 및 느린 로그에는 다른 권한이 필요한 것처럼 보이므로 폴더는 root-755로 작성됩니다.
스콘

답변:


190

이것은 나를 위해 일했다 :

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
catch_workers_output = yes

편집하다:

편집 할 파일은 원하는 풀을 구성하는 파일입니다. 기본적으로 /etc/php-fpm.d/www.conf


5
<스트라이크> 어떤 구성 파일에서? php.ini? php-fpm.conf? </ strike>. 나는 내 안에 그것을 주석 처리를 제거/etc/php-fpm.d/www.conf
Swivel

16
우분투 14에서이 파일은 /etc/php5/fpm/pool.d/www.conf에 있습니다
Gilberto Albino

2
문제는이 어려운 "주요 오류 로그"의 위치입니다 ... 아, 알다시피, 그것은 php_admin_value[error_log]동일한 구성 파일 의 값입니다 -CentOS 7의 /var/log/php-fpm/www-error.log 예 :
Brad Peabody

7
sudo vi /etc/php/7.0/fpm/pool.d/www.conf나를 위해
콜린 앤더슨

이것은 데비안 9.1과 PHP-FPM 7.0에서 올바른 방법이었습니다.
Antwane

79

내 php-fpm 로그가 작성되기 전에 오랫동안이 문제로 어려움을 겪었습니다 /var/log/upstart/php5-fpm.log. upstart와 php-fpm의 상호 작용 방식 사이에 버그가있는 것 같습니다. 자세한 내용은 여기를 참조하십시오 : https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595


11
감사!! 이것이 나를위한 열쇠였습니다. 나중에 이것을 기억하지 않을 것이기 때문에 두 파일을 ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
심볼릭 링크로 연결

PHP는 너무 혼란 스럽습니다 ... 사전 작성된 /var/log/php7.0-fpm.log것이 있으므로 php_admin_value[error_log] = /var/log/fpm-php.www.log비표준 로그로 리디렉션됩니다 ??
피터 크라우스

53

비슷한 문제가 있었고 pool.d/www.conf파일에 다음을 수행해야했습니다.

php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

여전히 로그 파일을 작성하지 않았으므로 실제로 touch /var/log/fpm-php.www.log올바른 소유자를 설정하여 로그 파일을 만들어야했습니다 sudo chown www-data:www-data /var/log/fpm-php.www.log.

이 작업이 완료되고 php5-fpm이 다시 시작되면 로깅이 다시 시작되었습니다.


실제로 사실이었습니다! 나는 심지어 오류 직후에 사이트에 더 많은 내용이 나타났습니다 :)
holms

정말 감사합니다! 이것이 다른 사람을 돕는다면 우분투 14.04.1 (Jessie)의 해결책이었습니다.
William Turrell

방랑자 / 데비안 어색한 환경에서 문제가 발생했습니다.
Xosofox

시간 낭비 인 / var / log /와 같은 다른 경로
Pedro Góes

1
왜?! 이것은 여전히 ​​fpm-php7의 문제입니다.
user1634074

31

여러 개의 PHP 설정 파일이 있지만이 파일을 편집해야합니다.

/etc/php(version)?/fpm/pool.d/www.conf

다음과 같은 줄의 주석을 해제하십시오.

catch_workers_output

그러면 PHP stderr이 / dev / null 대신 php-fpm의 오류 로그로 이동할 수 있습니다.


2
docker를 사용하는 사용자의 경우 구성 파일이 있습니다./usr/local/etc/php-fpm.d/
Edward

이 conf를 사용하여 로그를 어디 /var/log/php7.0-fpm.log에서 /var/log/fpm-php.www.log또는 다른 곳으로 옮길 수 있습니까?
피터 크라우스

어디에 로그인합니까?
Viktor Joras

26

나는 여기에 많은 답변에서 통찰력을 수집하고 포괄적 인 해결책을 제시합니다.

따라서 php5-fpm으로 nginx를 설정하고 사용하여 메시지를 기록하면 기본적으로 error_log()볼 수 있습니다 /var/log/nginx/error.log.

를 사용하여 많은 데이터 (예 : 배열)를 로그하려는 경우 문제가 발생할 수 있습니다 error_log(print_r($myArr, true));. 배열이 충분히 크면 nginx로그 항목이 잘리는 것 같습니다 .

해결하기 위해서는이 당신을 구성 할 수 있습니다 fpm( php.net FPM 설정 로그를 관리하기 위해). 그렇게하는 단계는 다음과 같습니다.

  1. 열기 /etc/php5/fpm/pool.d/www.conf:

    $ sudo nano /etc/php5/fpm/pool.d/www.conf

  2. ;의 시작 부분에서 제거하여 다음 두 줄의 주석을 해제하십시오 . (error_log는 여기에 정의되어 있습니다 : php.net )

    ;php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on

  3. 작성 /var/log/fpm-php.www.log:

    $ sudo touch /var/log/fpm-php.www.log;

  4. /var/log/fpm-php.www.logphp5-fpm이 편집 할 수 있도록 소유권을 변경하십시오 .

    $ sudo chown vagrant /var/log/fpm-php.www.log

    참고 : vagrant소유권을 부여 해야하는 사용자입니다. $ ps aux | grep php.*www첫 번째 열 을 실행 하고 살펴보면 이것이 어떤 사용자인지 알 수 있습니다 .

  5. php5-fpm을 다시 시작하십시오 :

    $ sudo service php5-fpm restart

이제 로그가에 있습니다 /var/log/fpm-php.www.log.


나는 이것을 시도했지만 여전히 "fpm-php.www.log"는 비어 있습니다. 어떤 생각?
Sudharshan Nair

당신의 인쇄 phpinfo()이러한 설정은 실제로 @SudharshanNair, 집어있어되는지 확인합니다.
Gezim

@Gezim. 답장을 보내 주셔서 감사합니다. 내 오류 로그 경로는 /var/log/fpm-php.www.log입니다.
아직도이

@SudharshanNair, log_errors오류가 켜진 경우 확인해야 할 유일한 것은 파일의 권한 및 소유권입니다 (4 단계).
Gezim

@Gezim. 에 777 개의 권한과 소유권을 부여했지만 www-data:www-data아직 운이 없습니다. 어떤 아이디어?
Sudharshan Nair

14

v5.3.9부터 현재까지 (5.3.14 및 5.4.4) php-fpm에 https://bugs.php.net/bug.php?id=61045 버그가 있습니다 . 개발자가 약속 한 수정 사항은 다음 릴리스에서 제공 될 예정입니다. 기다리지 않으려면 해당 페이지의 패치를 사용하고 5.3.8로 다시 빌드하거나 롤백하십시오.


4

fpm.conf 파일에서 오류 로깅 전용 2 변수를 설정하지 않았습니다.

변수는 error_log(오류 로그 파일의 파일 경로) 및 log_level(오류 로깅 레벨)입니다.

; Error log file
; Note: the default prefix is /usr/local/php/var
; Default Value: log/php-fpm.log

error_log = log/php-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice

log_level = notice

/usr/local/var/php대신 기본값이 아니 /usr/local/php/var십니까? 그냥 추측.
n611x007

2

필자의 경우 오류 로그가 /var/log/php-fpm/www-error.log 로 가고 있음을 보여줍니다 . 그래서 /etc/php-fpm.d/www.conf에서이 줄을 주석 처리했습니다.

php_flag[display_errors]   is commented
php_flag[display_errors] = on  log will be at /var/log/php-fpm/www-error.log

위에서 말했듯 이이 줄의 주석도 제거했습니다.

catch_workers_output = yes

이제 nginx로 지정된 파일에서 로그를 볼 수 있습니다.


0

기존 답변에 다른 팁을 추가하고 싶습니다. 문제가 해결되지 않았기 때문입니다.

PHP 위치 블록에서 다음 nginx 지시문을 살펴보십시오.

fastcgi_intercept_errors on;

이 라인을 제거하면 많은 시간 동안 고군분투하고 머리카락을 당기는 일이 끝났습니다.

/etc/nginx/default.d/php.conf내 페도라 와 같이 포함 된 conf 디렉토리에 숨겨져있을 수 있습니다 .


-1

필자의 경우 php-fpm은 누락 된 php-mysql 모듈로 인해 로깅없이 500 오류를 출력합니다. Joomla 설치를 다른 서버로 옮기고 잊어 버렸습니다. 그래서 apt-get install php-mysql서비스 재시작으로 해결되었습니다.

나는 실패한 로깅을 성공적으로 고치려고 노력했다. 마지막으로 straceDB 관련 시스템 호출 후 실패 메시지를 발견했습니다. 내 사건은 op의 질문과 직접 ​​관련이 없지만 유용 할 수 있기를 바랍니다.


-4

"PHP-FPM"의 소유자 디렉토리를 확인하십시오.

넌 할 수있어:

ls -lah /var/log/php-fpm/
chown -R webusr:webusr /var/log/php-fpm/
chmod -R 777 /var/log/php-fpm/

5
777에 결코 설정은 / var / 로그 / PHP-FPM, 당신은 당신의 서버가 심볼릭 링크 공격에 취약 (그렇지 않으면 더 나쁜) 제작
루카 Gibelli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.