понедельник, 8 октября 2012 г.

nginx: закрываем сайт на обслуживание

Варианты
1) в location /

## System Maintenance (Service Unavailable)
if (-f $document_root/system_maintenance.html ) {
error_page 503 /system_maintenance.html;
return 503;
}
error_page 503 /system_maintenance.html;

location = /system_maintenance.html {
   root /var/www/;
   internal;
}
(if нежелателен - там куча ограничений, нюансов и оно довольно сильно грузит сервер, IfIsEvil)

2) try_files closed.html @apache =503;
(проблема в том, что в таком варианте код ответа при обслуживании будет 200). Хотя можно сделать отдельный location closed.html и в нем выставить код ответа 503, по желанию оттуда же отдать и саму страницу.
Можно написать как
try_files /maintenance.html $uri $uri/ @wordpress;
но если индекса нет и апач перекидывает на какую-то внутреннюю страницу с рядом опций - могут быть проблемы, если такой файл вдруг появится, а это не предусмотрено системой. Плюс, если была встроенная фильтрация на бэкенде - так ее можно обойти. Ну и 2 лишние проверки получаем. С другой стороны, для простых движков этот вариант будет быстрее и если вся статика не вынесена по отдельным location, автоматом начнётся раздача статики. Но снова безопасность, надо тогда создавать location на потенциально опасные места и там запрещать, обязательно. В частности на .ht, .svn, .git, служебные области. В общем, лучше первая версия этого варианта.

3) через переменную и if
set $Maintenance = off;
if ($Maintenance = 'on') ...
но см выше про if.

4) выделить блок, закрывающий сайт на обслуживание в отдельный файл maint.conf, сделать 2 файла maint-on.conf и maint-off.conf, и вешать симлинк на нужную версию файла с именем maint.conf и потом делать reload. Можно не симлинком а копированием. Самый быстрый способ, но требует немного кодинга.

Линки

Комментариев нет:

Отправить комментарий