Отображение 500 и ошибка вместо 502 в nginx с fpm upstream

#php #nginx

#php #nginx

Вопрос:

я начну с того, что моя настройка работает нормально для всех запросов, которые предназначены для отправки <400 кодов состояния.

В моей среде разработки я хочу отправить клиенту фактическую ошибку 500, включая ошибку. nginx не передает это, но регистрирует ошибку и отображает встроенную страницу 502.

я попытался установить fastcgi_intercept_errors off; , хотя это значение по умолчанию, но это тоже не сработало.

Рассматриваемый nginx — 1.15.3 из официального контейнера docker.

конфигурация

 server {
    listen 80;
    index index.php index.html;
    server_name localhost;

    error_log  /dev/stdout;
    access_log /dev/stdout;

    root /var/www/html/app/public;

    gzip on;

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml rss text/javascript;


location / {
try_files $uri /index.php$is_args$args;
}


    location ~ .php$ {

        fastcgi_split_path_info ^(. .php)(/. )$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_read_timeout 1000;
        fastcgi_intercept_errors off;
    }

}
  

я был бы рад любым предложениям.

с наилучшими пожеланиями

Обновить

Оказывается, что простое исключение не отвечает 500 при включении display_errors (что является случаем разработчика).

Я исправил это с помощью промежуточного программного обеспечения.

Комментарии:

1. Что генерирует ошибку 500? Это index.php скрипт? Я только что протестировал http_response_code(500); , и он без проблем передается клиенту.

2. я добавил исключение для контроллера, чтобы проверить эту проблему.

3. Вероятно, есть еще конфигурационные файлы, которые вы не показали, например, основной nginx.conf , как они выглядят? Также conf.d/default.conf обычно включает что-то вроде error_page 500 502 503 504 /50x.html; , это в игре?

4. @RichardSmith ваш комментарий позволил мне проверить, действительно ли я генерирую 500 с исключением, что приводит к моему ответу (см. Обновление). так что спасибо!