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