Назад | Перейти на главную страницу

Выключение веб-сервера для обслуживания

Примечание: я новичок в этой ситуации!

Как нам удается перенаправлять каждый запрос во время обслуживания на страницу, на которой говорится, что сайт находится в режиме обслуживания?

Я хочу автоматизировать этот процесс (через cron):

  1. Завершение работы apache
  2. Выполните обслуживание (в течение этого времени каждый запрос должен быть перенаправлен на страницу обслуживания)
  3. Запустить apache

В пункте 2, как перенаправить каждый запрос, когда apache не работает, или как люди справляются с этим (автоматически)? Оцените ваши ответы.

Спасибо

Если вы просто хотите сделать сайты недоступными во время обслуживания и использовать один файл для каждого виртуального хоста, например, ubuntu и debian, сделайте (/etc/apache2/sites-available и sites-disabled) вы можете просто отключить сайты, удалив ссылки с доступных сайтов (или убрав файлы). Вы также можете создать сайт «для всех» и включить на нем «сообщение обслуживания».

Другой вариант - использовать iptables для перенаправления всего трафика с http-порта на другой порт на сервере, где вы можете запустить вторичный веб-сервер (lighttpd или nginx или что-нибудь действительно маленькое, что может обслуживать статические html-страницы). Правило было бы таким:

iptables -t nat -A PREROUTING -p tcp -i ethX -d <server ip> –dport 80 -j DNAT –to <server ip>:<new port>

Вы также можете полностью перенаправить на другой сервер / порт.

Apache должен продолжать работать для обслуживания веб-сайтов, но вы можете настроить его для отправки всех запросов на веб-страницу обслуживания с помощью директивы DocumentRoot. Предполагая, что вы создаете страницу для уведомления об обслуживании внутри каталога обслуживания, она будет выглядеть так:

Нормальные операции:

DocumentRoot "/var/www/html"
#DocumentRoot "/var/www/html/maintenance"

Операции обслуживания: просто закомментируйте нормальную и раскомментируйте строку обслуживания:

#DocumentRoot "/var/www/html"
DoucmentRoot "/var/www/html/maintenance"

Затем просто перезагрузите Apache, чтобы изменения вступили в силу: /etc/init.d/httpd reload. Когда вы закончите, просто повторите процесс в обратном порядке.

Обратите внимание, что если у вас несколько VirtualHosts, вам нужно будет изменить DocumentRoot для каждого из них. Может быть (возможно, есть) более простой метод - для простой настройки я этим и делаю.

Я не могу говорить об Apache, но вот как я это делаю в IIS (который, как предполагается, имеет для этого лучший интерфейс, IMHO).

  • У меня сайт в папке (ЯВНО)
  • У меня есть еще один сайт в другой папке, который является «сайтом обслуживания».
  • Я просто меняю папки на сайте перед обслуживанием.

В IIS / ASP.NET также есть хороший механизм, в котором «блочный файл» переводит весь сайт в режим обслуживания. Это делается путем помещения страницы "app_offline.htm" в корневую папку сайта. С другой стороны, odf заключается в том, что вы не можете тестировать сайт под другим URL-адресом, пока он находится (что может быть полезно для последней внутренней проверки того, что все работает). Итак, я пошел на ремонтный сайт.

Иметь отдельную папку и перенаправить сайт - ИМХО самый быстрый способ.