Не обслуживать статические файлы, если сервер находится в автономном режиме - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующая конфигурация nginx, которая обрабатывает мой статический веб-сайт и перенаправляет запросы на мой бэкэнд REST:

server {
    listen 80 default_server;
    server_name _;

    # Host static content directly
    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ =404;
    }

    # Forward api requests to REST server
    location /api {
        proxy_pass http://127.0.0.1:8080;
    }

}

Если мой бэкэнд REST отключается, прокси-модуль возвращает HTTPстатус «502 Bad Gateway», и я могу перенаправить запросы на страницу состояния, добавив следующее:

# Rewrite "502 Bad Gateway" to "503 Service unavailable"
error_page 502 =503 @status_offline;

# Show offline status page whenever 503 status is returned
error_page 503 @status_offline;
location @status_offline {
    root /var/www/html;
    rewrite ^(.*)$ /status_offline.html break;
}

Однако это будет работать только для запросов, которые обращаются к бэкэнду REST напрямую.Как перенаправить запросы на мой статический веб-сайт таким же образом, когда сервер находится в автономном режиме?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Я думаю, что это правильный ответ - запрос авторизации идеален для любой ситуации, когда вы хотите «пропинговать» бэкэнд перед возвратом запрошенного контента.

В прошлом я использовал аналогичную схему дляСервер nginx, на котором я хотел проверить правильность заголовка аутентификации перед прокси в S3.

0 голосов
/ 11 декабря 2018

У Nginx есть некоторые проверки работоспособности и возможности мониторинга состояния, которые кажутся связанными, но я не смог найти правильный способ их использования.

Хотя это и предполагалось использоватьДело в том, что на самом деле для авторизации, я обнаружил, что модуль nginx auth_request работает для меня:

# Host static content directly
location / {
    # Check if REST server is online before serving site
    auth_request /api/status; # Continues when 2xx HTTP status is returned
    # If not, redirect to offline status page
    error_page 500 =503 @status_offline;

    root /var/www/html;
    index index.html;
    try_files $uri $uri/ =404;
}

Он вызовет /api/status в качестве подзапроса перед обработкой статического содержимого и будет продолжаться только тогда, когдаподзапрос возвращает статус HTTP в диапазоне 200.Кажется, он возвращает статус 500, когда сервер находится в автономном режиме.

Этот метод может иметь некоторые последствия для производительности, поскольку теперь вы всегда делаете дополнительный запрос, но это, по-видимому, является неотъемлемым требованием проверки того, работает ли ваша служба.онлайн.

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