Re: Поддомены

Роман n.g.i.n.x.e.r at gmail.com
Mon Aug 31 17:38:09 MSD 2009


нет только на 1 домен
а по другому я не знаю как запрограммировать веб интерфейс для работы юзеров
так что даже если и чуток медленнее, выбирать не приходится

31 августа 2009 г. 15:20 пользователь Sergey Shepelev
(temotor at gmail.com) написал:
> 2009/8/31 Роман <n.g.i.n.x.e.r at gmail.com>:
>> у меняполитика на 1 домен (сайт) 1 сервер
>> внутри него всеи описывается
>> поэтому вариант с кучей server {} не подходит
>
> Вы дали обет использовать единственную директиву server{} на весь
> конфиг nginx? Странные надуманные ограничения. Вы связываете себе руки
> и ничего не получаете взамен.
>
>>
>> свой рут я же тоже задаю с помощью root    /home/user/host.ru$subdomain;
>> я поэтому и написал что скрипт находящийся в
>> /home/user/host.ru$subdomain видит пипку /home/user/host.ru$subdomain
>> как корневую
>> и кроме как по домену в конфиге nginx нельзя опереться чтобы написать
>> свое rewrite правило для конкретного поддомена
>>
>> что то типо
>>
>> if ($subdomain_name = "subdomain" ) {
>>        if (!-f $request_filename) {
>>                rewrite ^ /engine/index.php last;
>>        }
>> }
>>
>
> Еще раз, писать if (!-f $request_filename) нельзя. Вместо этого надо писать
>
> try_files $uri @php;
> location @php { proxy_pass/fastcgi_pass ... }
>
> Еще раз, опишите задачу. Не то, как вы представляете её решение, а задачу.
> Вариант с проксированием на пхп на куче поддоменов в одном server{} я
> вам описал в первый раз.
>
> Чтобы реализовать вышеописанное if subdomain, if !-f *для одного
> поддомена*, нужно сделать вот что:
>
> server {
>  listen ...
>  server_name subdomain.domain.tld;
>  root /var/www/$server_name;
>
>  location / {
>    try_files $uri @php;
>  }
>
>  location @php {
>    fastcgi_pass/proxy_pass ...
>  }
> }
>
> Этот конфиг:
> 1) работает только для одного субдомена: subdomain.domain.tld
> 2) раздаёт файлы из /var/www/subdomain.domain.tld
> 3) запросы, для которых файлы не найденны, отдаёт бекенду (у вас это
> PHP) в конфигурации fastcgi_pass или proxy_pass
>
> Можно немножко изменить для произвольных субдоменов:
>
> server {
>  listen ...
>  server_name ~ (.*)\.domain\.tld;
>  root /var/www/domain/$1;
>
>  location / {
>    try_files $uri @php;
>  }
>
>  location @php {
>    fastcgi_pass/proxy_pass ...
>  }
> }
>
> Этот конфиг:
> 1) работает для всех субдоменов: *.domain.tld, но не для домена domain.tld.
> 2) раздаёт файлы из /var/www/domain/subdomain
> 3) запросы, для которых файлы не найденны, отдаёт бекенду (у вас это
> PHP) в конфигурации fastcgi_pass или proxy_pass
>
>>
>> 31 августа 2009 г. 12:43 пользователь Sergey Shepelev
>> (temotor at gmail.com) написал:
>>> 2009/8/31 Роман <n.g.i.n.x.e.r at gmail.com>:
>>>> ничего не понял
>>>>
>>>> мне для каждого поддомена нужно задать свой реврайт
>>>> к чему ваша конструкция
>>>>
>>>
>>> Моя конструкция автоматически задаёт свой root для любого поддомена.
>>>
>>> Чтобы для каждого поддомена задавать свой реврайт, опишите каждый
>>> поддомен в отдельной секции server.
>>>
>>> server {
>>>  listen ..
>>>  server_name sub1.host.ru;
>>>  rewrite ^ http://foo.bar/;
>>> }
>>>
>>> server {
>>>  listen ..
>>>  server_name sub2.host.ru;
>>>  rewrite ^ http://zar.bar/;
>>> }
>>>
>>> Или я не понял чего вы хотите. Объясните задачу без терминов nginx. На
>>> входе есть то-то, на выходе надо иметь то-то.
>>>
>>>> может я чего то не понял
>>>> объясните подробнее пожалуйста
>>>>
>>>>
>>>> 31 августа 2009 г. 3:39 пользователь Sergey Shepelev
>>>> (temotor at gmail.com) написал:
>>>>> Извините, предыдущее письмо по ошибке отправил.
>>>>>
>>>>> 2009/8/31 Sergey Shepelev <temotor at gmail.com>:
>>>>>> 2009/8/31 Роман <n.g.i.n.x.e.r at gmail.com>:
>>>>>>> Гдето здесь видел описание работы автоматических поддоменов
>>>>>>> реализовал у себя подобное
>>>>>>> но столкнулся с пробелмой - в поддомене нужно сделать реврайт правила
>>>>>>>
>>>>>>> сечас работает такая схема
>>>>>>>
>>>>>>> server {
>>>>>>>        listen          127.0.0.1:80;
>>>>>>>        server_name     host.ru *.host.ru;
>>>>>>>
>>>>>>>
>>>>>>>        set $subdomain "";
>>>>>>>        if ($host ~* ^([a-z0-9-\.]+)\.host.ru$) {set $subdomain "/sub_$1";}
>>>>>>>        if ($host ~* ^www.host.ru$)             {set $subdomain "";}
>>>>>>> ...
>>>>>>>        location / {
>>>>>>>                root    /home/user/host.ru$subdomain;
>>>>>>>        }
>>>>>>> ...
>>>>>>> }
>>>>>>>
>>>>>>> при такой схеме все что находится в поддомене понимает что находится в
>>>>>>> location /
>>>>>>> и привязаться не к чему как к хосту
>>>>>>> но как тогда написать правило if (!-f $request_filename) { ... } ?
>>>>>>>
>>>>>>
>>>>>> Нельзя писать if (-f $request_filename).
>>>>>>
>>>>>>> или может есть другой вариант?
>>>>>>>
>>>>>>
>>>>>> server {
>>>>>>  listen ..
>>>>>>  server_name www.hosting.ru;
>>>>>>  ...
>>>>>> }
>>>>>>
>>>>>> server {
>>>>>>  listen..
>>>>>>  server_name ~ ^(.*)\.hosting\.ru;
>>>>>
>>>>> Самое главное ж:
>>>>>
>>>>>  root /home/user/hosting.ru/$1;
>>>>>
>>>>>>
>>>>>>  location / {
>>>>>>    try_files $uri @backend;
>>>>>>  }
>>>>>>
>>>>>>  location @backend { здесь проксирование на ваш PHP }
>>>>>> }
>>>>>>
>>>>>
>>>>
>>>
>>
>


More information about the nginx-ru mailing list