Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Поддомены
нет только на 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 }
>>>>>> }
>>>>>>
>>>>>
>>>>
>>>
>>
>
|