Request Entity Too Large
Maxim Dounin
mdounin at mdounin.ru
Thu Mar 28 12:03:56 UTC 2013
Hello!
On Thu, Mar 28, 2013 at 02:24:53PM +0400, denis wrote:
> 28.03.2013 2:38, Maxim Dounin пишет:
> >>Не думал, что порядок вставки инклюда с виртуалхостами влияет на к
> >>ним применение директив описанных в http { }
> >Я стесняюсь спросить - а что показывает nginx -V? В nginx'е из
> >коробки - влиять не должно, но сторонние модули такие модули.
> >
> Опыт показывает, что влияет очень сильно, вплоть до того, что
> поддомены приходилось описывать с именами вида 000_sub.domain, иначе
> первым видело основной блок и привет. (инклуд вида sites/*)
> Хотя явно столкнулись только с 1 версией, не помню уже какой, но
> теперь поддомены всегда называем так, чем ниже уровень, тем больше
> нулей.
> Более того, на 1 сервере даже игнорировались эти нули и файлы
> читались в порядке их создания. Явный баг был.
"Правда, только ... и не выиграл, а проиграл." (c)
В некоторых случаях порядок написания директив или блоков в
конфиге, действительно, важен. Так, при описании нескольких
виртуальных серверов на одном и том же listen-сокете по умолчанию
используется тот виртуальный сервер, что описан первым:
http://nginx.org/ru/docs/http/ngx_http_core_module.html#listen
: Если у директивы есть параметр default_server, то сервер, в
: котором описана эта директива, будет сервером по умолчанию для
: указанной пары адрес:порт. Если же директив с параметром
: default_server нет, то сервером по умолчанию будет первый сервер,
: в котором описана пара адрес:порт.
При этом директива include - не гарантирует какой-либо порядок
включения файлов при использовании масок, что плохо отражается на
работоспособности конфигов, использующих директиву include для
включения множества блоков server{} и при этом не использующих
параметр default_server директивы listen.
Очевидных решений два:
1) Не использовать include "вида sites/*". Вообще конфигурить
nginx одним файлом - гораздо приятнее и удобнее, а главное -
понятнее, особенно новичкам.
2) Расставлять "listen ... default_server" правильно.
Отдельно может доставить попытка использовать имена серверов,
заданные регулярными выражениями, ибо оные регулярные выражения -
проверяются в порядке описания в конфигурационном файле
(http://nginx.org/r/server_name/ru). Каковой порядок, как мы уже
выяснили выше, в случае "include sites/*" не определён.
Всё это относится к типичных ошибкам при конфигурировании nginx'а
вообще, и к проблемам использованного по умолчанию конфига во
многих пакетах в linux'е - в частности. И, без сомнения, может
являться причиной наблюдаемых проблем. Однако проблема в этом
случае - в неконсистентности конфига, загружаемого по "include
sites/*", а не в том, что стоит раньше, client_max_body_size - или
include.
> И кстати порядок имеет значение, и когда описываем limit_zone, и
> кэши, и proxy_pass...
> Очень грустно, что нет вывода итоговой конфигурации, сильно
> облегчило бы жизнь. Думаю, задача максимум в 10 строк решается,
> nginx-у делаем ключик типа апачевского -S и на него вывод.
Может быть, но в ситуации, когда порядок вообще говоря не
определён - подобный вывод только собъёт с толку.
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru