Можно ли изменить код состояния HTTP, возвращаемый, когда шлюз proxy_pass не работает в nginx? - PullRequest
18 голосов
/ 23 ноября 2011

В целях SEO мы хотели бы изменить код состояния HTTP, возвращаемый всякий раз, когда серверная часть, стоящая за nginx, по какой-то причине отключается.

Мы хотели бы изменить это на "503 Сервис недоступен".А также предоставьте заголовок Retry-After, чтобы указать Google / Bing, что запрос должен быть повторен через X секунд.

Возможно ли это через nginx?

Я не говорю опользовательская страница ошибки, а скорее код состояния, возвращаемый в заголовке.

Ответы [ 2 ]

34 голосов
/ 01 февраля 2012

Я думаю, вам придется настроить конкретную страницу с ошибкой, однако, если вы это сделаете, вы сможете добиться того, что ищете.Попробуйте:

location / {
    proxy_pass http://backend;
    proxy_intercept_errors on;
    error_page 502 503 504 =503 @proxyisdown; # always reply with 503
}

location @proxyisdown {
    add_header Retry-After 500 always;
    index my_pretty_error_page.html; 
}

Если вы будете работать таким образом, вы сможете вернуть 503 (это часть =503 директивы error_page) и повторные заголовки с тем преимуществом, что вашпосетители получат красиво отформатированную страницу «К сожалению, в настоящее время у нас возникли проблемы, попробуйте снова через несколько минут» вместо пустой страницы «503, вы действительно не знаете, что это значит».:)

2 голосов
/ 25 октября 2013

Назовите свою страницу ошибки /500.html и:

error_page 400 404 500 502 504 =503 /500.html;

# Optional if your public root is set above and the same for error pages,
# I sometimes please them outside the app, which is why I'm including it.
location /500.html {
  root /path/to/public;
}

Должно работать так же, и мне кажется немного проще. Примечание: он также не поддерживает заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...