У меня есть несколько сайтов, хранящихся на сервере.
Если я хочу обновить свою конфигурацию apache, я хочу сообщить всем своим клиентам, что обновление будет через 30 минут.
Я могу изменить каждый веб-сайт, чтобы отображать это сообщение, но мне было интересно, как сделать его автоматическим? Как это сделать профессионально?
Кроме того, при перезапуске или обновлении Apache не будет «страницы обслуживания». Как я могу вместо этого показать для каждого веб-сайта страницу по умолчанию «в процессе обновления», если apache не работает? Мне нужно 2 сервера?
На этапе обновления всех пакетов вы просто продолжаете работать apache, и никто этого не заметит.
Фактический перезапуск apache может быть выполнен таким образом, чтобы отдельные пользователи не заметили этого, используя плавный перезапуск. Это позволит каждому рабочему потоку завершить обслуживание текущей страницы, а затем не принимать новые запросы. Затем сервер перезагружается, что занимает всего несколько секунд, и снова начинает обслуживать запросы.
Это не твоя проблема. Проблема в том, что делать, если что-то делает пойти не так. В котором apache не перезапускается, а n ваш пользователь воля уведомление. Итак, вы хотите убедиться, что ничто не может пойти не так.
И способ сделать это - создать точную зеркальную копию этого веб-сервера на другом компьютере, затем выполнить обновление там и посмотреть, что произойдет. Запишите все вещи, которые требуют ручного исправления или вмешательства перед перезапуском apache. Затем повторите весь процесс, пока не получите полностью плавную работу. И только после этого вы делаете апгрейд на реальном сервере.
Есть несколько способов сделать это, но я могу порекомендовать сделать это с помощью Javascript.
Вы можете в любой момент встроить скрипт на каждый сайт. Попросите сценарий проверить URL-адрес на вашем сервере, это может быть просто текстовый файл с 0 или 1, или вы можете поместить туда сообщение (JSON - хороший протокол для использования). У сценария на стороне клиента проверьте URL-адрес этой переменной. Если это 1, отобразить сообщение, если 0 - нет. Возможно, вы даже захотите закодировать сообщение в этом текстовом файле на случай, если вам нужно отобразить какое-то сообщение для всех пользователей вашего веб-сайта о задержке или любой другой информации.
Когда вы будете готовы выполнить миграцию, за 30 минут до этого пусть Javascript запустит панель уведомлений в верхней части сайтов, уведомляющую пользователей о том, что сайт будет вскоре обновлен.
Вы можете придумать что угодно, но, на мой взгляд, это лучший способ сделать это для ряда сайтов. Конечно, если у вас есть много обращений одновременно, это означает, что множество клиентов проверяют этот URL. Это просто зависит от вашей конкретной ситуации. Вы также можете сделать это на стороне сервера с некоторым кешированием.
Я хочу сообщить всем своим клиентам, что обновление будет через 30 минут.
Вам нужны дополнительные возможности помимо обслуживания статического контента - вы можете сделать это с помощью включений на стороне сервера или автоматического добавления PHP или развернуть собственное решение, используя язык, на котором вы разрабатываете свой сайт. Затем просто измените содержимое файла, который вы включаете . Однако это нетривиальное упражнение - для поддержки этого вам необходимо убедиться, что обслуживаемый HTML-контент не кэшируется (или имеет очень короткое время кеширования). Кроме того, если вы используете маршрут PHP, вы не можете просто записать вывод прямо в браузер, если вам нужно использовать файлы cookie / сеансы / перенаправление.
при перезапуске или обновлении Apache не будет «страницы обслуживания». Как я могу вместо этого показать для каждого веб-сайта страницу по умолчанию «в процессе обновления», если apache не работает?
Это НАМНОГО сложнее. Учитывая, что перезапуск вашего экземпляра Apache не должен занимать больше нескольких секунд, это не стоит усилий. Если перезапуск занимает более 5 секунд, значит, вам нужно исправить другую проблему.
Ты можешь использовать mod_layout для добавления пользовательского кода HTML или PHP в начало или конец страниц. Увидеть mod_layout FAQ для хорошего обзора того, как использовать мод, но он может быть таким же простым в использовании, как:
<VirtualHost www.foo.com:80>
LayoutFooter "Insert some sort of message here..."
</VirtualHost>