2013-04-03 2 views
13

У меня около 1300vhosts в одном файле nginx conf. Все со следующим макетом (они перечислены друг в друге в файле vhost).Nginx перенаправляет на неправильный vhost

Теперь моя проблема в том, что иногда мой браузер перенаправляет сайт2 на сайт1. По какой-то причине, хотя имена доменов не соответствуют событию.

Похоже, что nginx всегда перенаправляется на первый сайт в файле vhosts.

Кто-нибудь, кто знает, что эта проблема может быть?

server { 
    listen 80; 

    server_name site1.com; 
    rewrite ^(.*) http://www.site1.com$1 permanent; 
} 

server { 
    listen 80; 

    root /srv/www/site/public_html/src/public/; 
    error_log /srv/www/site/logs/error.log; 
    index index.php; 

    server_name www.site1.com; 

    location/{ 
     if (!-e $request_filename) { 
      rewrite ^.*$ /index.php last; 
     } 
    } 

    location ~ .(php|phtml)$ { 
     try_files $uri $uri/ /index.php; 
     fastcgi_param SCRIPT_FILENAME /srv/www/site/public_html/src/public$fastcgi_script_name; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 
} 

server { 
    listen 80; 

    server_name site2.com; 
    rewrite ^(.*) http://www.site2.com$1 permanent; 
} 

server { 
    listen 80; 

    root /srv/www/site/public_html/src/public/; 
    error_log /srv/www/site/logs/error.log; 
    index index.php; 

    server_name www.site2.com; 

    location/{ 
     if (!-e $request_filename) { 
      rewrite ^.*$ /index.php last; 
     } 
    } 

    location ~ .(php|phtml)$ { 
     try_files $uri $uri/ /index.php; 
     fastcgi_param SCRIPT_FILENAME /srv/www/site/public_html/src/public$fastcgi_script_name; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 
} 

EDIT Может быть, еще одна вещь, чтобы отметить, что, я перезагружать все это ВХосты каждые 2 минуты с Nginx -s перезагрузкой.

На первых тестах он выглядит как перенаправление происходит только при перезагрузке ... Идя сделать еще несколько тестов, но это может быть полезно ..

ответ

15

Reference (как Nginx обрабатывает запрос): http://nginx.org/en/docs/http/request_processing.html

В этой конфигурации nginx проверяет только поле заголовка запроса «Host», чтобы определить, к какому серверу должен быть направлен запрос. Если его значение не соответствует ни одному имени сервера, либо запрос не содержит это поле заголовка вообще, тогда nginx направит запрос на сервер по умолчанию для этого порта.

сервер по умолчанию является первым один - это стандартное поведение по умолчанию Nginx в

Не могли бы вы проверить заголовок узла тех плохих запросов?

Также вы можете создать явный сервер по умолчанию, чтобы поймать все эти плохие запросы и просто зарегистрировать информацию о запросе (например, $ http_host) в другой файл журнала ошибок для расследования.

server { 
    listen  80 default_server; 
    server_name _; 
    error_log /path/to/the/default_server_error.log; 

    return  444; 
} 

[UPDATE] Как вы делаете nginx -s reload и у вас так много доменов в этой Nginx конф файла, возможно следующее:

Перезагрузка работает как этот

запуска новые рабочие процессы с новой конфигурацией, изящное закрытие старых рабочих процессов

Таким образом, старые рабочие и новые работники могли сосуществовать некоторое время. Например, когда вы добавляете новый серверный блок (с новым доменным именем) в ваш файл конфигурации, во время перезагрузки новые рабочие будут иметь новый домен, а старый - нет. Когда запрос отправляется старым рабочим процессом, он будет считаться неизвестным хостом и обслуживаться сервером по умолчанию.

Вы сказали, что это делается каждые 2 минуты. Не могли бы вы провести

ps aux |grep nginx 

и проверить, сколько времени работает каждый рабочий?Если это больше 2 минут, перезагрузка может работать не так, как вы ожидали.

+1

Это выглядит как проблема, но как изменить заголовок хоста? Это не то, что мы делаем на наших сайтах явно. –

+0

Я добавил ваш код в начало файла nginx vhosts. Но все же перенаправляется на тот же самый vhost (это в настоящее время занимает второе место в файле). –

+0

обновил мой ответ. дайте мне знать, если это поможет –

Смежные вопросы