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

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
stalker2009
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-10-05 21:17:10

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

Непрочитанное сообщение stalker2009 » 2009-10-05 21:39:56

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

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

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"
Видно, что условие выполняется, но без наличия !~* правильные поддоемны выкидывает на главную и наоборот...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

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

Непрочитанное сообщение zingel » 2009-10-06 9:42:14

а фронтендом апачь да?
Z301171463546 - можно пожертвовать мне денег

stalker2009
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-10-05 21:17:10

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

Непрочитанное сообщение stalker2009 » 2009-10-06 21:49:22

да, на том же хосте апач

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

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

Непрочитанное сообщение hizel » 2009-10-06 23:38:44

у вас из воздуха $1 и $2 возьмутся?
в скобочки нужное засуньте ;]
и да вы отказываете домену в возможности содержать цифирки? :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

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

Непрочитанное сообщение LMik » 2009-10-07 8:09:10

zingel писал(а):а фронтендом апачь да?
бэкэндом?

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

Вот сравните

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

и ваше

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

В первой строке выделяется два поддомена соответственно $1 и $2
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

stalker2009
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-10-05 21:17:10

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

Непрочитанное сообщение stalker2009 » 2009-10-08 13:15:45

Благодарю, буду разбираться дальше.. как только - так сразу отпишусь по результатам :)

stalker2009
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-10-05 21:17:10

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

Непрочитанное сообщение stalker2009 » 2009-10-09 21:35:23

закрываю тему, если кому интересно - вопрос был решен следующим образом
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/ лежат конфиги вирт хостов апача.