Ребят. Сейчас обнаружил такую проблему: есть сервер, на нем несколько WP сайтов. Сайты работают на nginx+php-fpm. Несколько сайтов на одном IP.
Если на Сайт№1 заходить с www (хотя он не используется), то открывается Сайт№2 (хотя в адресной строке - www.сайт№1.ru).
Обнаружил это, когда увидел, что есть переходы на сайт№2 с сайта№1. И что самое печальное - в выдаче гугла по основному запросу сайта№2 находиться www.сайт№1.
Vooda2012, нужно в конфигурации nginx для каждого виртуалхоста добавлять в server_name оба варианта - и с www и без оного. Если на NS указан *.site.com на ваш сервер - то добавить и такой вариант в конфиг nginx, иначе любое blahblah.site.com откроет сайт№1
А ещё, нужно убрать конфиг по умолчанию чтобы не смотрел на какой-то из сайтов, а показывал что нибудь вроде 403 или возвращал 444 (пустой ответ). Для этого создайте "сайт" с таким конфигом:
Код:
# Default server for clients who do not send correct Host header.
# The underline in the file name makes sure that this file comes first in the dir.
server {
server_name _;
listen *:80 default_server deferred;
return 444;
}
И перезапустите nginx.
p.s: Сам буквально на днях с этим столкнулся, когда увидел в выдаче по одному из сайтов с www главную другого сайта
---------- Сообщение добавлено 17:20 ---------- Предыдущее 16:04 ----------
Пока писал свой красивый пост уже во всём разобрались :)
Сообщение от Vooda2012
Может кто подскажет, как правильно прописать в основном конфиге nginx, чтобы не добавлять эту запись для каждого домена.
server_name в любом случае должна быть для каждого сайта, без неё никак. Один общий конфиг для нескольких сайтов написать конечно можно, но где-то в любом случае нужно брать значение для переменной, используемой в server_name. Имя директории? Или по server_name $host; - он будет отвечать на любой адрес, который направлен на ваш IP. Но тогда нужно ставить какую то проверку типа
Код:
if ($host != "example.com") {
return 403;
}
А в example.com нужно перечилять существующие сайты, или опять же, ставить переменную. Можно поробовать проверять существует ли директория и отвечать только на те $host, которые совпадают с существующими директориями. Иначе любой может добавить себе в hosts ваш ip адрес с любым именем и долбиться по нему.
Итак, я заморочился и таки написал конфиг для любого количества сайтов в Nginx. При обращении он проверяет наличие папки и отдаёт только существующие сайты. Если папки нет - вернёт пустой ответ.
Код:
server {
server_name ~^(www.)?(?.+)$;
root /var/www/$domain;
if (!-d /var/www/$domain) {
return 444;
}
#остальной ваш конфиг
}