ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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


 




Copyright © Lexa Software, 1996-2009.