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

Alexey Popov lol at chistydom.ru
Tue Mar 7 10:14:19 MSK 2006


Привет.

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, все работает нормально.
Что не так?

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

С уважением,
Alexey Popov





More information about the nginx-ru mailing list