Как переопределить код состояния, полученный от proxy_pass в резервном варианте ошибки

#nginx

Вопрос:

У меня есть эта настройка в моей конфигурации nginx:

 location @img_fallback {  try_files $uri =404; }  location ~ .(png|jpe?g)$ {  proxy_intercept_errors on;  error_page 500 502 503 504 @img_fallback;  proxy_pass https://someinternalservice.com:3000; }  

Это работает очень хорошо, сначала он пробует прокси, а затем try_files, если он получает какую-либо ошибку, но проблема в том, что если прокси возвращает какие-либо ошибки, например 502, и try_files находит изображение, мы все равно получаем код состояния 502, даже когда загружается само изображение.

Как мы можем убедиться, что статус, отправленный с прокси-сервера, не используется в ответе в случае ошибки?

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

1. Попробуйте error_page 500 502 503 504 = @img_fallback; , если это не поможет, попробуйте error_page 500 502 503 504 =200 @img_fallback;

2. @IvanShatsky error_page 500 502 503 504 = @img_fallback; работает отлично, спасибо, если вы хотите опубликовать его в качестве ответа, я могу его принять

Ответ №1:

Когда указанный обработчик ошибок будет обработан другим вышестоящим сервером (например, когда у вас есть что-то подобное error_page 502 /error_handler.php , что будет обработано серверной частью PHP-FPM) или когда обработчик ошибок является именованным местоположением, можно сообщить nginx, что обработчик может изменить код ответа HTTP с помощью = знака:

 error_page 500 502 503 504 = @img_fallback;