Хобрук: Ваш путь к мастерству в программировании

Как обслуживать статические ресурсы с помощью Nginx в режиме обслуживания (503)

Я использую Nginx в качестве переднего прокси на своем сервере для своего сайта. Я хочу использовать его для перенаправления пользователей на мое веб-приложение, когда оно работает, или на страницу обслуживания php, когда я нахожусь в режиме обслуживания.

Вот моя директива сервера:

server {
    listen               443;

    return 503;
    error_page           503 @maintenance;
    root                /usr/maintenance;
    location @maintenance {
        fastcgi_pass     php-fpm;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include          /etc/nginx/fastcgi_params;
    }

    location / {
        proxy_pass       https://webapp;
    }
}

Если я раскомментирую return 503, клиенту будет отправлен ответ 503, в противном случае будет отправлено веб-приложение.

Моя страница с ошибкой PHP 503 отображается, как и ожидалось, но проблема в том, что она имеет статические ресурсы (css, изображения, js), и я получаю код возврата 503, когда Chrome пытается их загрузить. Ресурсы находятся в корневом каталоге.

Как я могу это исправить ? Есть ли лучший способ, чем комментировать/раскомментировать return 503, для обработки режимов обслуживания и живого?

Спасибо

02.07.2014

Ответы:


1

После некоторых исследований я нашел элегантный способ сделать это. Источник: http://blog.mythictechnologies.com/2011/02/10/setting-a-maintenance-page-with-nginx/

Итак, вот мой новый конфиг

server {
    listen               443;

    error_page           503 @maintenance;
    root                /usr/maintenance;
    location @maintenance {
        fastcgi_pass     php-fpm;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include          /etc/nginx/fastcgi_params;
    }

    location ~* \.(css|png|js|jpg|jpeg) {
        # The file will be returned
    }

    location / {
        return           503;
        proxy_pass       https://webapp;
    }
}

Вы можете настроить регулярное выражение \.(css|png|js|jpg|jpeg) по своему усмотрению, но добавление файлов в белый список кажется хорошей идеей.

02.07.2014
Новые материалы

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

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

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

Случай использования npm3 вместо npm2 для разработки библиотеки
Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...