Сообщаем о ремонтных работах на сервере
Gena Makhomed
gmm на csdoc.com
Вс Сен 5 19:27:18 MSD 2010
на хабре появилась статья http://habrahabr.ru/blogs/webdev/103406/
с описанием недостатков приведенного в документации nginx способа
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
вместо
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
этот фрагмент конфига приводит к тому, что возвращается
HTTP/1.1 200 OK
что создает неприятные побочные эффекты с поисковыми машинами.
это уже вторая проблема с методом try_files /system/maintenance.html
первая обсуждалась в теме "Можно ли боротся с кэшэм страницы-заглушки?"
там была проблема в том, что для этой страницы надо как-то выставить
заголовок "Cache-Control: no-cache", сейчас - проблема в том,
что надо выставить 503 статус и заголовок "Retry-After: 3600".
предлагаемый вариант решения этих и других проблем с файлами-заглушками:
если в директиве try_files указано имя файла, которое не содержит
переменных - значит это файл-заглушка, и в случае существования
этого файла - искать location = c этим именем файла, и если такой
location обнаружен - сделать в него internal redirect. если такой
location не обнаружен - действовать как и раньше, просто отдать
этот файл с HTTP/1.1 200 OK и дефлтовыми заголовками.
пример конфига:
location / {
try_files /system/maintenance.html $uri $uri/ @default;
}
location = /system/maintenance.html {
add_header Cache-Control no-cache;
add_header Retry-After 3600;
error_page 503 = /503.html;
return 503;
internal;
}
преимущества:
* полная обратная совместимость с существующими конфигурациями nginx
* решение всех известных на сегодня проблем со страницами-заглушками
* сайт может переводиться в/из maintenance mode c помощью touch и rm
P.S. потребуется также внести изменения в ngx_http_headers_module,
чтобы с помощью директивы add_header можно было добавлять заголовки
Cache-Control и Retry-After к ответам с 503 статусом.
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru