Welcome! Log In Create A New Profile

Advanced

Re: Поддомены

September 07, 2009 06:14PM
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@gmail.com) написал:
> > 2009/8/31 Роман <n.g.i.n.x.e.r@gmail.com>:
> >> нет только на 1 домен
> >> а по другому я не знаю как запрограммировать веб интерфейс для работы юзеров
> >> так что даже если и чуток медленнее, выбирать не приходится
> >>
> >
> > Последний раз, опишите задачу. Мне надоело, что вы игнорируете самую
> > важную просьбу.
> >
> >> 31 августа 2009 г. 15:20 пользователь Sergey Shepelev
> >> (temotor@gmail.com) написал:
> >>> 2009/8/31 Роман <n.g.i.n.x.e.r@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@gmail.com) написал:
> >>>>> 2009/8/31 Роман <n.g.i.n.x.e.r@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@gmail.com) написал:
> >>>>>>> Извините, предыдущее письмо по ошибке отправил.
> >>>>>>>
> >>>>>>> 2009/8/31 Sergey Shepelev <temotor@gmail.com>:
> >>>>>>>> 2009/8/31 Роман <n.g.i.n.x.e.r@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 }
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >

--
Игорь Сысоев
http://sysoev.ru
Subject Author Posted

Re: Поддомены

Роман September 07, 2009 06:14PM

Re: Поддомены

Igor Sysoev September 07, 2009 06:14PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 218
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready