Здравствуйте, 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@xxxxxxxxxxxxxx