ПРОЕКТЫ 


  АРХИВ 


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: Поддомены



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 }
>>>>>>> }
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


 




Copyright © Lexa Software, 1996-2009.