Назад | Перейти на главную страницу

Nginx не регистрирует ошибки PHP

При доступе к некоторым PHP-скриптам на моем веб-сайте я получаю ужасное сообщение об ошибке 500. Я хотел бы знать, что не так, чтобы исправить это, но Nginx не регистрирует никаких ошибок PHP в указанном мной файле журнала. Это мой серверный блок:

server {
    listen 80;
    server_name localhost;
    access_log /home/whitey/sites/localhost/logs/access.log;
    error_log /home/whitey/sites/localhost/logs/error.log error;
    root /home/whitey/sites/localhost/htdocs;
    index index.html index.php /index.php;

    location / { 

    }

    location ~ \.php$ {
        fastcgi_pass unix:/tmp/phpfpm.sock;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
    }
}

Обратите внимание, что некоторые сценарии PHP работают нормально, а другие - нет. Таким образом, с PHP нет глобальной проблемы, в этих сценариях есть что-то, что заставляет Nginx выдавать ошибку 500.

Как я могу разобраться в этом? Единственное в error.log это ошибка о том, что favicon.ico не найден.

Вам необходимо добавить в конфигурацию пула php-fpm следующее:

catch_workers_output = 1

Вы должны добавить эту строку в каждый определенный пул!

У меня была аналогичная проблема.

Я пробовал развернуть phpMyAdmin с php-fpm 7.0 и nginx на CentOS7. Nginx показал мне 500.html, но ни в одном файле журнала ошибок не было. Я сделал все это

catch_workers_output = 1

и

display_errors = On

Ни в журнале nginx, ни в журнале php-fpm не было строки с ошибкой.

И когда я прокомментировал эту строку в nginx.conf, я смог увидеть на странице браузера что-то не так.

#    error_page 500 502 503 504 /50x.html;
#    location = /50x.html {
#    }

Именно это помогло мне разобраться в проблемах.

php-fpm бросает все в /var/log/php5-fpm.log или похожие.

Найдите в своем nginx.conf error_log определение. Может, nginx что-то пишет в этот журнал ошибок.

Вы также можете включить ведение журнала в файл на PHP.

Для меня это казалось проблемой с выскочкой, которая перенаправляла журналы для php-fpm в свое собственное местоположение, например:

/var/log/upstart/php5-fpm.log

В ubuntu Precise 12.04 также есть некоторые ошибки, которые могут способствовать отсутствию возможности ведения журнала: https://bugs.php.net/bug.php?id=61045 Если вы все еще используете эту версию.

Когда PHP display_errors отключен, ошибки PHP могут возвращать ошибку Nginx 500.

Вам следует взглянуть на свои журналы php-fpm, я уверен, вы найдете там ошибку. В CentOS 7:

tail -f /var/log/php-fpm/www-error.log

Вы также можете показать ошибки PHP. В вашем php.ini измените:

display_errors = Off

кому:

display_errors = On

Надеюсь, поможет.

Вот что случилось со мной:

Когда я удалил журнал ошибок, nginx заметил, что он больше не пропал. Когда я воссоздал этот файл, nginx больше не узнал бы, что он существует, поэтому не записывал в файл.

Чтобы исправить это, выполните следующие команды (я использую Ubuntu 14.04 LTS):

sudo service nginx reload

Если это не сработает, попробуйте:

sudo service nginx restart