ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Оптимальная конфи гурация для vhosting'а



Alexey N. Kovyrin пишет:
Что-то я не понимаю в логике работы rewrite... Сделал такую тестовую конфигурацию:

map $server_name $vhost_id {
     default           0;
     h1.servik.com     1;
     h2.servik.com     2;
}

server {
 listen       8080;
 server_name  home *.servik.com;

location / {
           root servik;
           index  index.html index.htm;

           rewrite ^/(.*)$ /host$vhost_id/$1 break;
}

Получил:
1) При запросе = http://h2.servik.com/index.htm получаю сожержимое файла /opt/nginx/servik/host2/index.htm (как и хотел). 2) При запросе = http://h2.servik.com/ получаю 404 (open() "/opt/nginx/servik/host2/host2/index.htm" failed (2: No such file or directory)).

То есть если файл указан явно, то все ок, если нет, то он находит файл в соответствии с директивой index, но при этом дублирует вставку переменной в результат rewrite. Кстати, если каталог host2 удалить, то он говорит уже 404 ("/opt/nginx/servik/host2/index.html" is not found (2: No such file or directory)), спотыкаясь, как я понимаю, еще на моменте перед поиском индекса в каталоге.

Короче, как выяснилось, что повторяет он кусок строки с начала и до следующего за вставляемой переменной символа... то есть так:

rewrite ^/(.*)$ /host$vhost_id/$1 break; дает http://h2.servik.com/ => /opt/nginx/servik/host2/host2/index.htm rewrite ^/(.*)$ /xxx/host$vhost_id/$1 break; дает http://h2.servik.com/ => /opt/nginx/servik/xxx/host2/xxx/host2/index.htm
ну и, наконец,
rewrite ^/(.*)$ $vhost_id/$1 break; дает http://h2.servik.com/ => /opt/nginx/servik2/index.htm

как результат, получилось обойти это все "хаком" следующего вида:

root /opt/nginx/servik/host;
и потом:
rewrite ^/(.*)$ $vhost_id/$1 break; дает http://h2.servik.com/ => /opt/nginx/servik/host2/index.htm, что и требовалось... но как-то воооообще криво и неочевидно...

P.S. Извиняюсь за флуд в мейллисте, но писал в процессе того, как разбирался с "глюком" (или глюком?)...

--
/Scoundrel    [http://kovyrin.info]






 




Copyright © Lexa Software, 1996-2009.