Re: Нужна помощь по базовому синтаксису конфига nginx

Sergey Shepelev temotor at gmail.com
Thu Jul 23 19:32:58 MSD 2009


2009/7/23 Alex, the Marrch Ca'at <marrch.caat at gmail.com>:
> Спасибо за помощь. Я в принципе знаю, что регулярное выражение может
> содержать выделения, я только вот не понимаю - если у меня есть такой
> вот примерно кофиг:
>   server {
>       server_name   ~^(www\.)?(.+)$;
>
>       location ~ /([a-zA-Z]*)/([a-zA-Z]*).php$ {
>           root  /sites/$2;
>       }
>   }
> - то что окажется в $2 на момент обработки директивы root? Мне это,
> увы, совершенно не очевидно :(
>

Регекспы последовательно затирают друг друга. Там окажется кусок из локейшна.
Чтобы использовать кусок сервера, его нужно сохранить в отдельную переменную.
server {
    server_name   ~^(www\.)?(.+)$;

    set $host_without_www $2;

    location ~ /([a-zA-Z]*)/([a-zA-Z]*).php$ {
        root  /sites/$2;
    }
}

И Алексей вам очень правильно подсказывает, что скорее надо просто
делать редирект с www на без или наоборот.
А то поисковики найдут у вас дублированный контент и занизят рейтинг.

> По остальному - да, я в курсе, что правильно делать через try_files, я
> просто о том, что есть, вероятно, целый набор совершенно базовых
> вещей, которые нигде структурировано не изложены. И поиск по архивам
> рассылки тут, увы, мало поможет - поскольку чтобы искать, нужно очень
> хорошо представлять себе, что именно ищешь. А когда чайник в nginx-е
> вроде меня просто не представляет себе спектра возможностей его
> конфигурирования - то никакой поиск тут не поможет, или в лучшем
> случае отнимет столько времени, сколько, объективно, никто не может
> себе позволить потратить на это.
>

Вы всё правильно сказали. К сожалению, это правда. Попробуйте также
посмотреть английскую nginx вики.

> С уважением -
> Alex, the Marrch Ca'at.
>
> 2009/7/23 Sergey Shepelev <temotor at gmail.com>:
>> 2009/7/23 Alex, the Marrch Ca'at <marrch.caat at gmail.com>:
>>> Доброго всем времени суток!
>>>
>>> Я использую связку nginx+memcached, она обслуживает запросы,
>>> приходящие на большое количество разных доменов, и соответственно - в
>>> включе memcached используется имя домена. Но мне хочется, чтобы при
>>> этом от имени домена автоматически отрезалось начальное "www.", если
>>> оно там имеется, так, чтобы для www.mydomain.ru и mydomain.ru
>>> использовался один ключ memcached. Очевидно, что нужно вместо
>>> следующей инструкции:
>>> set $memcached_key "Tsites::$host::Index";
>>> - использовать if с регулярным выражением, который в случае наличия в
>>> начале $host строки "www." будет подставлять в $memcached_key весь
>>> остаток имени домена. Но вот как это правильно написать в синтаксисе
>>> конфигов nginx - я не знаю, подскажите, пожалуйста.
>>>
>>
>> http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#server_name
>> Регулярное выражение может содержать выделения (0.7.40), которые могут
>> затем использоваться в других директивах:
>>
>>    server {
>>        server_name   ~^(www\.)?(.+)$;
>>
>>        location / {
>>            root  /sites/$2;
>>        }
>>    }
>>
>>> Вообще, на сайте Игоря Сысоева я не нашел никаких описаний вот таких
>>> вот базовых вещей. Собственно, даже само существование операторов if и
>>> set становится ясно только из примеров конфига, а на всякие более
>>> сложные вещи - например, то, что можно писать вещи вроде if (!-e
>>> $request_filename) - легко можно так и не наткнуться. Не знает ли
>>
>> http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#if
>>
>> И вот как раз то, что вы написали надо делать не через if, а через try_files.
>> http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#try_files
>>
>>> кто-нибудь, вдруг уже кто-то написал справку по таким вот базовым
>>> моментам в конфигурации nginx? Или может, она есть на оф.сайте, просто
>>> я ее не нашел?..
>>
>> Надо искать по архиву рассылки.
>> http://www.lexa.ru/nginx-ru/
>>
>>>
>>> С уважением и надеждой на помощь -
>>> Alex, the Marrch Ca'at
>>>
>>
>


More information about the nginx-ru mailing list