Мне нужно вернуть код состояния 503 с одного из моих сайтов, пока он не работает на техническое обслуживание, в проверенной временем моде SE_firendly. Кажется, я не могу понять, как это сделать, не вызывая внешние скрипты, чего я бы предпочел избежать.
Есть ли директива apache, которая позволит мне вернуть произвольный код статуса HTTP, не прибегая к хакерским атакам, таким как вызов php-скрипта, который устанавливает заголовок статуса?
Это обслуживает каждый запрос статической страницы удержания вместе со статусом 503.
RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"
RedirectMatch используется для отмены самой страницы хранения, которая в противном случае создала бы бесконечный цикл.
mod_header используется для установки заголовка Retry-After, чтобы вы могли сообщить Google / другим ботам и т. д., что в этом примере вам следует выполнить резервное копирование через 18000 секунд (5 часов). Ты можешь sudo ap2enmod header
для активации mod_header (необходим для директивы Header).
Пытаться
Redirect 503 / /
Из http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :
Другие коды состояния могут быть возвращены путем указания числового кода состояния в качестве значения статуса. Если статус находится в диапазоне от 300 до 399, должен присутствовать аргумент URL, в противном случае его следует опустить. Обратите внимание, что статус должен быть известен коду Apache (см. Функцию send_error_response в http_protocol.c).
Дополнительное примечание. Будет отображен стандартный / настроенный документ ErrorDocument для ошибки 503.
Чтобы сделать ваш режим обслуживания более гибким, установите 503, когда существует специальный файл, ala:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]
ПРИМЕЧАНИЕ: расположение DOCUMENT_ROOT может отличаться в httpd 2.2 и 2.4.
Таким образом, все, что вам нужно сделать, это «коснуться /path/to/docroot/.main maintenance», и ваш сайт сразу же начнет возвращать 503. Затем, чтобы все было в порядке, создайте настраиваемую красиво отформатированную страницу ошибок html и добавьте ее в правильный файл конфигурации сервера Apache:
ProxyErrorOverride on
ErrorDocument 503 /error/503.html
А для получения бонусных баллов, если у вас несколько веб-серверов, укажите расположение .main maintenance в общей файловой системе или получите еще больше бонусных баллов:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
Преимущество создания файла режима обслуживания заключается в том, что он работает, когда ваше приложение не работает, это быстро и просто, а прокси-сервер для кэширования внешнего интерфейса легче обрабатывать, потому что вы можете обрабатывать все серверные 503 одним махом.
Источники: