optimize_server_names

Gena Makhomed makhomed at pbank.lutsk.ua
Fri Nov 16 05:38:01 MSK 2007


Здравствуйте, All!

очень похоже на то, что опция optimize_server_names
работает не совсем так, как описано в документации.

> Если оптимизация разрешена и все name-based сервера,
> слушающие на одной паре адрес:порт, имеют одинаковую конфигурацию,
> то во время исполнения запроса имена не проверяются и в редиректах
> используется первое имя сервера. Если в редиректе нужно использовать
> имя хоста, переданное клиентом, то оптимизацию нужно выключить.

у меня есть два name-based сервера, которые имеют разную конфигурацию,
запросы на www.onesite.com через отдельный server перенаправляются
на основное имя сайта onesite.com, и если файл на основном сайте
не найден - 404 ответ клиенту приходит от имени new.server.com

вот конкретный пример: запрашивается страница http://www.onesite.com/en/news_en.html
сначала срабатывает rewrite и делает permanent redirect на http://onesite.com/en/news_en.html
потом запрос посылается backend`у, который отвечает "GET /en/news_en.html HTTP/1.0" 404 4643
совершенно неожиданно для себя обнаруживаю в лог-файле сервера new.server.com такую запись:

[error] 16674#0: *8666 open() "/usr/share/nginx/html/en/news_en.html" failed (2: No such file or directory),
client: 77.77.77.77, server: new.csdoc.com, URL: "/en/news_en.html", host: "www.onesite.com"

получается, что некоторая часть запросов к www.onesite.com обрабатывается как и положено,
сервером с именем onesite.com, а другая часть запросов - сервером new.server.com ?

в файле new.csdoc.com-access.log наблюдаю запросы к сайту www.onesite.com
HTTP/1.1 с ответами сервера 404 и 200, UserAgent`ы - Opera и боты.
запросы HTTP/1.0 - ответы только 404 и UserAgent`ы - только боты.

сейчас явно прописал в конфиге "optimize_server_names off".

после чтения документации ожидал, что optimize_server_names
будет оптимизировать имена только внутри одного server { }.

фрагмент конфигурации nginx/0.5.31:

# default: proxy_intercept_errors off
# default: optimize_server_names on

#
# new.server.com
#

server {
        listen          11.11.11.11:80 default;
        listen          22.22.22.22:80 default;
        listen          33.33.33.33:80 default;
        listen          44.44.44.44:80 default;

        server_name     new.server.com;

        access_log      /var/log/nginx/new.server.com-access.log;
        error_log       /var/log/nginx/new.server.com-error.log warn;

        root            /usr/share/nginx/html;
}

#
# onesite.com
#

server {

        listen          33.33.33.33:80 default;
        listen          44.44.44.44:80 default;

        server_name     onesite.com;    
        server_name     en.onesite.com; 
        server_name     onesite.com.ua; 

        access_log      /var/log/nginx/onesite.com-access.log;
        error_log       /var/log/nginx/onesite.com-error.log warn;

        location / {
                proxy_pass              http://127.0.0.1;
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_redirect          off;
        }
}

server {

        listen          33.33.33.33:80;
        listen          44.44.44.44:80;

        server_name     w.onesite.com;
        server_name     ww.onesite.com;
        server_name     www.onesite.com;
        server_name     wwww.onesite.com;
        server_name     wwwww.onesite.com;
        server_name     wwwwww.onesite.com;
        server_name     wwwwwww.onesite.com;

        rewrite ^(.*)$ http://onesite.com$1 permanent;
}

server {

        listen          33.33.33.33:80;
        listen          44.44.44.44:80;

        server_name     w.en.onesite.com;
        server_name     ww.en.onesite.com;
        server_name     www.en.onesite.com;
        server_name     wwww.en.onesite.com;
        server_name     wwwww.en.onesite.com;
        server_name     wwwwww.en.onesite.com;
        server_name     wwwwwww.en.onesite.com;

        rewrite ^(.*)$ http://en.onesite.com$1 permanent;
}

server {

        listen          33.33.33.33:80;
        listen          44.44.44.44:80;

        server_name     w.onesite.com.ua;
        server_name     ww.onesite.com.ua;
        server_name     www.onesite.com.ua;
        server_name     wwww.onesite.com.ua;
        server_name     wwwww.onesite.com.ua;
        server_name     wwwwww.onesite.com.ua;
        server_name     wwwwwww.onesite.com.ua;

        rewrite ^(.*)$ http://onesite.com.ua$1 permanent;
}

-- 
Best regards,
 Gena                          mailto:makhomed at pbank.lutsk.ua







More information about the nginx-ru mailing list