Аналог FilesMatch или DirectoryMatch

Igor Sysoev is at rambler-co.ru
Tue Oct 21 09:36:54 MSD 2008


On Sat, Oct 18, 2008 at 03:40:17PM +0300, Serguei I. Ivantsov wrote:

> Igor Sysoev wrote:
> > On Fri, Oct 17, 2008 at 04:18:11PM +0300, Serguei I. Ivantsov wrote:
> >
> >   
> >> Столкнулся с трудностью. Как можно в nginx-е сделать поведение
> >> аналогичное директивам FilesMatch или DirectoryMatch в Apache
> > Никак. По моему опыту настройки Апача такая гибкость ведёт к трудно
> > сопровождаемым конфигурациям. Когда конфиг достигает заметных размеров,
> >
> >   
> Если я всё правильно понял, то как раз отсутствие этой самой гибкости и
> приведёт к разрастанию конфига nginx-а. Возьмём мой пример. Есть ~40
> виртуалхостов. И мне в конфиге для каждого (жирным шрифтом) сервера
> нужно прописывать одни и те же настройки:
> 
> location ~ \.php$ {
>      proxy_pass   http://127.0.0.1;
> }
> 
> location ~ /\.ht {
>     deny  all;
> }
> 
> Что уже неудобно. А теперь ещё добавим условие: текстовую выдачу из
> /russain/ нужно отдавать в CP1251.
> Будет примерно следующее:
> 
>        location ~ ^/russian/.*\.html?$ {
>             charset             windows-1251;
>         }
> 
>         location ~ ^/russian/.*\.php$ {
>             proxy_pass          http://127.0.0.1:3128;
>             charset             windows-1251;
>         }
> 
>         location ~ \.php$ {
>             proxy_pass          http://127.0.0.1:3128;
>         }
> 
>         location ~ /\.ht {
>             deny  all;
>         }
> 
> 
> Что мне кажется несколько некрасиво.

Безусловно, из-за этого конфиги становятся больше. Но, говоря о конфигах
Апача, я имел ввиду конфиги, в которых была смесь Location'ов, Directory,
Files и Rewrite и при этом всё это было внушительного размера.
При добавлении нового Location'а нужно было смотреть, как вся эта смесь
влияет на новый Location и как влияет на всё остальное какой-нибудь
изменённый параметр где-то в Directory.

Гибкость хороша для конфигурации среднего размера, умещающейся на экран,
когда её можно окинуть взглядом и понять влияние одного на другое. В этом
случае гибкость позволить сэкономить пару строчек, как в вышеописанном
случае. Когда же конфигурации большая, то проще тупо добавлять location'ы,
желательно без регулярных выражений. Я называю это масштабируемостью
конфигурации. Можно возразить, что сайт с конфигурацией среднего размера
вряд ли когда-то станет большим, но я обычно видел сайты, конфигурация
которых росла.

nginx заставляет делать с самого начала масштабируемую конфигурацию:
он несколько усложняет конфигурацию для сайта среднего размера (писать
нужно больше), но упрощает сопровождение растущего сайта (не нужно учитывать
влиянение существенной части старой конфигурации на новую.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list