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 }
}