Re: Сообщаем о ремонтных работах на сервере
Alexey Kovyrin
alexey на kovyrin.net
Вс Сен 5 20:00:55 MSD 2010
Добавлять Cache-Control смысла не вижу - я не знаю кем нужно быть,
чтобы сконфигурировать свой кеш или своего бота на хранение non-2xx
результатов.
А в остальном мы делаем вот так:
------------------------------------------------------------------------------------
# 503 -> static for POSTs could cause 405
recursive_error_pages on;
if (-f $document_root/system/maintenance.html) {
return 503;
}
error_page 503 @503;
location @503 {
error_page 405 = /system/maintenance.html;
# Serve static assets if found.
if (-f $request_filename) {
break;
}
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
rewrite ^(.*)$ /503.html break;
}
------------------------------------------------------------------------------------
2010/9/5 Gena Makhomed <gmm at csdoc.com>:
>
> на хабре появилась статья 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 статусом.
--
Alexey Kovyrin
http://kovyrin.net/
Подробная информация о списке рассылки nginx-ru