Поддомены

Сергей Аверьянов asv at pallant-mobile.ru
Mon Aug 31 21:55:54 MSD 2009


Роман wrote:
Извините, Роман, но ваши вопросы-ответы никаких сил читать нет. Мало
того, что
вы игнорируете то, что у вас спрашивают коллеги, так еще и пишите так,
 что для понимания написанного без знаков препинания текста приходится
его перечитывать по нескольку раз.

> здесь приводили пример только когда описывается каждый поддомен в
> отдельном сервере
> я же сказал что не могу такое автоматизировать на данном этапе
>
>
>
> 31 августа 2009 г. 18:45 пользователь Igor Sysoev (is at rambler-co.ru) написал:
>   
>> On Mon, Aug 31, 2009 at 06:28:41PM +0400, Роман wrote:
>>
>>     
>>> я уже ее решил путем такой махинации
>>>       
>> Именно махинации. Не удивляйтесь, если при переезде на новую версию
>> махинация перестанет работать. Вам уже несколько раз предложили описать
>> то, что нужно, словами (а также желательно с применением точек и запятых),
>> с тем, чтобы показать правильную конфигурацию.
>>
>>     
>>> location / {
>>>       root    /home/user/host.ru$subdomain;
>>>
>>>       try_files $uri @backend;
>>> }
>>>
>>> location @backend {
>>>       root    /home/user/host.ru$subdomain;
>>>
>>>       if ($subdomain_name = "subdomain") {
>>>               rewrite ^ /engine/index.php last;
>>>       }
>>>
>>>       fastcgi_pass    unix:/var/run/php-fpm/user.sock;
>>>       fastcgi_index   index.php;
>>>       fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
>>>       include fastcgi_params;
>>> }
>>>
>>> теперь в @backend я могу дазавать различные реврайты для любого поддомена
>>>
>>>
>>> 31 августа 2009 г. 17:55 пользователь Sergey Shepelev
>>> (temotor at gmail.com) написал:
>>>       
>>>> 2009/8/31 Роман <n.g.i.n.x.e.r at gmail.com>:
>>>>         
>>>>> нет только на 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 }
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>>                       
>> --
>> Игорь Сысоев
>> http://sysoev.ru
>>
>>
>>     

--
С уважением,
Сергей Аверьянов





More information about the nginx-ru mailing list