У меня есть настройка 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, когда есть место.