Re: Поддомены
Роман
n.g.i.n.x.e.r at gmail.com
Mon Aug 31 18:28:41 MSD 2009
я уже ее решил путем такой махинации
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 }
>>>>>>>> }
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the nginx-ru
mailing list