ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Поддомены



здесь приводили пример только когда описывается каждый поддомен в
отдельном сервере
я же сказал что не могу такое автоматизировать на данном этапе



31 августа 2009 г. 18:45 пользователь Igor Sysoev (is@xxxxxxxxxxxxx) написал:
> 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@xxxxxxxxx) написал:
>> > 2009/8/31 Роман <n.g.i.n.x.e.r@xxxxxxxxx>:
>> >> нет только на 1 домен
>> >> а по другому я не знаю как запрограммировать веб интерфейс для работы 
>> >> юзеров
>> >> так что даже если и чуток медленнее, выбирать не приходится
>> >>
>> >
>> > Последний раз, опишите задачу. Мне надоело, что вы игнорируете самую
>> > важную просьбу.
>> >
>> >> 31 августа 2009 г. 15:20 пользователь Sergey Shepelev
>> >> (temotor@xxxxxxxxx) написал:
>> >>> 2009/8/31 Роман <n.g.i.n.x.e.r@xxxxxxxxx>:
>> >>>> у меняполитика на 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@xxxxxxxxx) написал:
>> >>>>> 2009/8/31 Роман <n.g.i.n.x.e.r@xxxxxxxxx>:
>> >>>>>> ничего не понял
>> >>>>>>
>> >>>>>> мне для каждого поддомена нужно задать свой реврайт
>> >>>>>> к чему ваша конструкция
>> >>>>>>
>> >>>>>
>> >>>>> Моя конструкция автоматически задаёт свой 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@xxxxxxxxx) написал:
>> >>>>>>> Извините, предыдущее письмо по ошибке отправил.
>> >>>>>>>
>> >>>>>>> 2009/8/31 Sergey Shepelev <temotor@xxxxxxxxx>:
>> >>>>>>>> 2009/8/31 Роман <n.g.i.n.x.e.r@xxxxxxxxx>:
>> >>>>>>>>> Гдето здесь видел описание работы автоматических поддоменов
>> >>>>>>>>> реализовал у себя подобное
>> >>>>>>>>> но столкнулся с пробелмой - в поддомене нужно сделать реврайт 
>> >>>>>>>>> правила
>> >>>>>>>>>
>> >>>>>>>>> сечас работает такая схема
>> >>>>>>>>>
>> >>>>>>>>> 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
>
>


 




Copyright © Lexa Software, 1996-2009.