Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Сообщаем о ремонтных ра ботах на сервере
On Sun, Sep 05, 2010 at 06:27:18PM +0300, Gena Makhomed wrote:
>
> на хабре появилась статья 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 статусом.
Мне не нравится неявная зависимость - "имя файла, которое не содержит
переменных - значит это файл-заглушка". Например, заглушка может иметь вид
/$host/system/maintenance.html
Это нужно делать флагами, например,
try_files /system/maintenance.html [>/503.html]
$uri $uri/
@default;
или
try_files /system/maintenance.html [>]
$uri $uri/
@default;
Во втором случае делается внутренний редирект без изменения имени (то есть,
system/maintenance.html остаётся).
--
Игорь Сысоев
http://sysoev.ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|