Локальная резервная страница ошибки Nginx, если прокси-сервер недоступен

9

Я пересылаю запросы в локальный сервис через сервер Nginx. То, что я сейчас пытаюсь сделать, - это вернуться на страницу локальной ошибки в случае, если служба становится недоступной.

Моя текущая конфигурация

server {
    listen       80;
    server_name  "";

    location / {
        proxy_pass  http://127.0.0.1:9080;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
    }

    error_page 501 502 503 @maintenance;
    location @maintenance {
            root   /locust/www/fallback/htdocs;
            index  index.html index.htm;
    }
}

Прокси работает, но как только я отключу сервис на 9080, index.html моего места обслуживания НЕ будет отображаться.

Любые предложения о том, что не так с этим конфигом?

Деннис Винтер
источник

Ответы:

12

На самом деле, мне нужно было лишь немного изменить ваш конфиг:

error_page 501 502 503 /500.html;
location = /500.html {
        root   /locust/www/fallback/htdocs;
}

и, очевидно, переименуйте то, что index.htmlвы хотите представить 500.html.

орешки
источник
1
Используя этот подход, что происходит, когда приложение, запущенное на proxy_pass, выбрасывает 501, 502 или 503? Некоторые приложения (например, Django) обрабатывают свои собственные 50-кратные ошибки, поэтому они могут иметь собственные страницы ошибок. Подойдет ли этот подход к тому, что приложение сгенерировало 50-кратные страницы ошибок со страницей Nginx 500.html?
Джо Дж
Я не проверял это, но я на 99% уверен, что именно эти ошибки будут отображать /500.html. Идея заключается в том, что когда nginx получает 501 502 503 от прокси-сервера, он отображает /500.html. Прокси-сервером является django.
орехи
1

Попробуйте указать точный URL для страницы ошибки, например:

    proxy_intercept_errors on;
    error_page  500 502 503 504 402 403 401  /500.html;
    root   /locust/www/fallback/htdocs;
Андрей Михальцов
источник
Нет. :( Я попробовал ваши изменения конфигурации в обоих местах, но безуспешно.
Деннис Винтер