Завершение работы веб-сервера для обслуживания
Примечание: я новичок в этой ситуации!
Как нам удается перенаправить каждый запрос во время обслуживания на страницу, где говорится, что сайт находится в режиме обслуживания?
Я хочу автоматизировать этот процесс (через cron):
- Отключение apache
- Выполните обслуживание (в течение этого времени каждый запрос должен быть перенаправлен на страницу обслуживания)
- Запустите Apache
В пункте 2, как мне перенаправить каждый запрос, когда apache не работает, или как люди управляют этим (автоматически)? Ценю ваши ответы.
Спасибо
3 ответа
Если вы просто хотите сделать сайты недоступными во время обслуживания и использовать один файл для каждого виртуального хоста, как Ubuntu и Debian Do (/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
, Когда вы закончите, просто полностью измените процесс.
Обратите внимание, что если у вас есть несколько виртуальных хостов, вам нужно будет изменить этот DocumentRoot для каждого. Может быть (возможно, есть) более простой метод - для простой настройки это то, что я делаю.
Я не могу говорить об Apache, но вот как я делаю это в IIS (который, как правило, имеет ИМХО лучший интерфейс для этого).
- У меня есть сайт в папке (ЯВНО)
- У меня есть другой сайт в другой папке, которая является "сайтом обслуживания".
- Я просто меняю папки на сайте перед обслуживанием.
В IIS / ASP.NET также есть хороший механизм, при котором "файл блока" переводит весь сайт в режим обслуживания. Это можно сделать, поместив страницу "app_offline.htm" в корневую папку сайта. Негативная сторона odf заключается в том, что вы не можете проверить сайт по другому URL, пока он находится (что может быть полезно для последней внутренней проверки того, что все работает). Итак, я пошел на сайт технического обслуживания.
ИМХО самый быстрый способ - иметь отдельную папку и перенаправлять сайт.