Страница 1 из 1

nginx+rewrite+логика поведения

Добавлено: 2009-10-05 21:39:56
stalker2009
Доброго времени суток. Есть вопрос по работе злополучного нжинкса с реврайтами. Сразу оговорюсь - конфиг работает, проблема в том, что он не должен работать ( по моему скромному)...

Код: Выделить всё

nginx version: nginx/0.7.62
built by gcc 4.1.2 20070115 (SUSE Linux)
configure arguments: --with-debug
Задача была редиректить вирт хосты ( этого в гугле много) и кидать на главную все не существующие поддомены

Код: Выделить всё

server {
    listen       192.168.0.77:80;
server_name *.server.ru;
   location / {
       set $myHost $host;
if ($host !~* "^\w+\.server\.ru/*$") {
   set $uid $2;
   set $myHost $1;
   rewrite ^(.*)$ /usver$uid$1 break;
   }

   index index.php;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header Host $myHost;
   proxy_pass http://127.0.0.1:80/;
   }
}
При включенном дебаге в логах видно, что

Код: Выделить всё

2009/10/05 21:51:56 [debug] 29303#0: *395 http args: ""
2009/10/05 21:51:56 [debug] 29303#0: *395 http exten: "php"
2009/10/05 21:51:56 [debug] 29303#0: *395 http header: "Host: gss.site.ru"
--- поскипано----
2009/10/05 21:51:56 [debug] 29303#0: *395 generic phase: 2
2009/10/05 21:51:56 [debug] 29303#0: *395 http script complex value
2009/10/05 21:51:56 [debug] 29303#0: *395 http script var: "gss.site.ru"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script set $myhost
2009/10/05 21:51:56 [debug] 29303#0: *395 http script var
2009/10/05 21:51:56 [debug] 29303#0: *395 http script var: "gss.site.ru"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script regex: "^\w+\.site\.ru*$"
2009/10/05 21:51:56 [notice] 29303#0: *395 "^\w+\.site\.ru*$" matches "gss.site.ru", client: 212.158.161.136, server: *.site.ru, request: "GET /index.php HTTP/1.1", host: "gss.site.ru"
, referrer: "http://site.ru/edit_site.php"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script if
2009/10/05 21:51:56 [debug] 29303#0: *395 http script complex value
2009/10/05 21:51:56 [debug] 29303#0: *395 http script capture: ""
2009/10/05 21:51:56 [debug] 29303#0: *395 http script set $uid
2009/10/05 21:51:56 [debug] 29303#0: *395 http script complex value
2009/10/05 21:51:56 [debug] 29303#0: *395 http script capture: ""
2009/10/05 21:51:56 [debug] 29303#0: *395 http script set $myhost
2009/10/05 21:51:56 [debug] 29303#0: *395 http script regex: "^(.*)$"
2009/10/05 21:51:56 [notice] 29303#0: *395 "^(.*)$" matches "/index.php", client: ***.***.***.***, server: *.site.ru, request: "GET /index.php HTTP/1.1", host: "gss.site.ru", referrer: "http
://site.ru/edit_site.php"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script copy: "/usver"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script var: ""
2009/10/05 21:51:56 [debug] 29303#0: *395 http script capture: "/index.php"
2009/10/05 21:51:56 [debug] 29303#0: *395 http script regex end
2009/10/05 21:51:56 [notice] 29303#0: *395 rewritten data: "/usver/index.php", args: "", client: ***.***.***.***, server: *.site.ru, request: "GET /index.php HTTP/1.1", host: "gss.site.ru",
referrer: "http://site.ru/edit_site.php"
Видно, что условие выполняется, но без наличия !~* правильные поддоемны выкидывает на главную и наоборот...

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-06 9:42:14
zingel
а фронтендом апачь да?

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-06 21:49:22
stalker2009
да, на том же хосте апач

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-06 23:38:44
hizel
у вас из воздуха $1 и $2 возьмутся?
в скобочки нужное засуньте ;]
и да вы отказываете домену в возможности содержать цифирки? :]

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-07 8:09:10
LMik
zingel писал(а):а фронтендом апачь да?
бэкэндом?

Вот ведь, сразу злополучным называть хороший продукт. :/

Вот сравните

$host ~ "^([^\.]+)\.([^\.]+)\.server.ru$"

и ваше

$host !~* "^\w+\.server\.ru/*$"

В первой строке выделяется два поддомена соответственно $1 и $2

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-08 13:15:45
stalker2009
Благодарю, буду разбираться дальше.. как только - так сразу отпишусь по результатам :)

Re: nginx+rewrite+логика поведения

Добавлено: 2009-10-09 21:35:23
stalker2009
закрываю тему, если кому интересно - вопрос был решен следующим образом
server {
listen 192.168.0.77:80;
server_name *.site.ru;
proxy_set_header Host $host;
root /srv/www/site.ru;

set $myuri $host;
if (!-e /srv/www/site.ru/vhosts.d/$myuri.conf){
set $newuri $1;
rewrite ^(.*)$ http://site.ru permanent;
}

if ($host ~* "^((\w+)\.site\.ru)$") {
set $subdomain $1;
set $uid $2;
rewrite ^(.*)$ /$1 break;
}
location / {
root /srv/www/site.ru/usver/$subdomain/;
proxy_pass http://127.0.0.1:80/;
index index.php;
}
}

В /srv/www/site.ru/vhosts.d/ лежат конфиги вирт хостов апача.