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

Alexey N. Kovyrin alexey at kovyrin.net
Mon Dec 26 02:11:25 MSK 2005


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]






More information about the nginx-ru mailing list