#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;