странности с optimize_server_names

Igor Sysoev is at rambler-co.ru
Tue Mar 7 11:06:54 MSK 2006


On Tue, 7 Mar 2006, Alexey Popov wrote:

> nginx-0.3.27 раздает статику с большого виртхостинга, вычисляя root из 
> хостнейма с помощью regex:
>
>       server {
>               listen  xx.xx.xx.xx:80;
>               <много listen>
>
>               server_name     .domain1.ru
>                                       ......
>                                       .domainN.ru;
>
>               error_page 404 402 http://bigdomain.ru/404.html;
>               access_log      /var/log/vhosts/users-access_log;
>
>               optimize_server_names   off;
>
>               location ~* ^.+\.(html?)$ {
>                       proxy_pass      http://127.0.0.1;
>               }
>               location /icons/ {
>                       root    /usr/local/www;
>               }
>               location / {
>                       set $rootdir nonexistent;
>                       if ($host ~* 
> (([a-z0-9-])([a-z0-9-])[a-z0-9-]*)\.([a-z0-
> 9-]+\.[a-z]+)$) {
>                               set $rootdir all/hosting/$4/$2/$3/$1;
>                       }
>
>                       root    /$rootdir;
>                       index index.html index.htm;
>                       autoindex on;
>               }
>       }
>
> При запросе http://sub1.domainN.ru/dir (где dir - существующая директория)
> хочется, чтобы nginx выдавал редирект на http://sub1.domainN.ru/dir/ ,
> как это делал Апач до установки nginx'a. Для этого написано:
> optimize_server_names   off;
> Но этого не происходит, и редирект всегда отдается на первый домен
> в server_name: http://domain1.ru/dir/
> На другом виртхостинге, где root берется из map, все работает нормально.
> Что не так?

А если "optimize_server_names  off" поставить на уровень http ?

> Хочу также обратить внимание всех на необходимость инициализации $rootdir
> в данном примере:  set $rootdir nonexistent;
> Угадайте, что будет, если вдруг в $host будет что-то не попадающее
> в regex. ;-)

Лучше делать так:

set   $rootdir nonexistent;
...
root  /all/hosting/$rootdir;


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list