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