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

Заставляем Nginx отправлять ошибки 4xx / 5xx из PHP-FPM

У меня есть настройка Nginx для обратного прокси для всех файлов, заканчивающихся на .php. В некоторых сценариях я проверяю параметры и отправляю «406 Not Acceptable» в качестве общей ошибки, которую необходимо уловить в jQuery / из Ajax. Я могу изменить ошибку, но я хотел бы иметь возможность отправить ее клиентской стороне. Если я отправлю 406, Nginx изменит его на 502 Bad Gateway и вставит собственное сообщение об ошибке.

Это работает для 404 и 403, но эти ошибки на самом деле не «применимы» в данном случае; это API, поэтому запрещенный - это не лучшая практика RESTful.

Я пробовал использовать fastcgi_intercept_errors но, похоже, это не имеет значения.

я использую Nginx 0.7.

Часть PHP:

header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable');
echo '{"error":"Missing Params"}';
exit;

Конфигурация Nginx

    location ~ .php$ {
            fastcgi_intercept_errors on;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

После протокола отсутствует пробел.

header($_SERVER['SERVER_PROTOCOL'] . ' 406 Not Acceptable'); //This works
header($_SERVER['SERVER_PROTOCOL'] . '406 Not Acceptable'); //This doesn't work.

Я получил тот же результат, что и вы. При отсутствии места Nginx перехватил ответ и выдал страницу с ошибкой 502. Он проходит через 406, когда есть место.