Страница обслуживания для сайта nodejs на основе nginx
Я хочу настроить страницу обслуживания для своего сайта (которую увидят посетители), но я также хочу, чтобы разработчики могли по-прежнему иметь доступ к сайту и тестировать вещи (хотя этот последний бит, доступ для разработчиков, является запросом от менеджера проекта... не уверен, что это лучший способ сделать это, так как кажется, что мы должны тестировать на промежуточном сервере).
Сайт основан на nodejs и работает на сервере nginx через proxy_pass.
Я бы сделал это в Apache, чтобы разрешить передачу параметра get, который позволил бы разработчику обойти перенаправление на страницу обслуживания. Не могу понять, как это сделать в nginx с proxy_pass.
Я смог заставить все перенаправить на страницу обслуживания, но изображения и CSS были повреждены и не загружались. Кроме того, я не мог реализовать переопределение параметров GET.
Любые предложения о том, как подойти к этому? Различные учебные пособия в Интернете и комментарии к SO, похоже, не работают, и я подозреваю, что это связано с использованием proxy_pass. Не уверен.
* edit: я видел этот пост на SO, но мои попытки реализовать его закончились тем, что посетитель был перенаправлен на "/maintenance" и получил ошибку сервера вместо моей страницы обслуживания. Кроме того, это не адрес переопределения перенаправления.
1 ответ
Это будет вопрос о том, как вы решите фильтровать пользователей. Если вы можете отфильтровать доступ по IP-адресу, куки-файлу или другому аспекту запроса, то можно использовать if
директива перенаправить / переписать всех других пользователей на страницу обслуживания. Вы упоминаете об использовании параметра GET - это условие может быть примером этого (использование $arg_PARAMETER
как задокументировано здесь):
server {
if ($arg_secret != "123456") {
rewrite ^(.*)$ /maintenance$1 break;
}
location /maintenance {
#root directive etc
}
location / {
#proxy_pass directive etc
}
}
Или вы можете инвертировать условие и конфигурацию, и только proxy_pass для условия, являющегося истинным. Однако директивы ``if` могут быть проблематичными (см. http://wiki.nginx.org/IfIsEvil), поэтому попробуйте перед развертыванием.
Что касается проблемы, с которой вы столкнулись, когда изображения и CSS не загружаются, вам необходимо обеспечить постоянное обслуживание этих ресурсов обслуживания, поскольку на них, вероятно, также влияют правила перенаправления. Пример location
Директива может быть такой:
location ~ /(.*\.css|.*\.jpg) {
root /var/www/maintenance;
}