Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Поддомены
Роман wrote:
Извините, Роман, но ваши вопросы-ответы никаких сил читать нет. Мало
того, что
вы игнорируете то, что у вас спрашивают коллеги, так еще и пишите так,
что для понимания написанного без знаков препинания текста приходится
его перечитывать по нескольку раз.
> здесь приводили пример только когда описывается каждый поддомен в
> отдельном сервере
> я же сказал что не могу такое автоматизировать на данном этапе
>
>
>
> 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
>>
>>
>>
--
С уважением,
Сергей Аверьянов
|