У меня пять веб-сайтов и три сервера, на всех работает nginx.
У каждого веб-сайта есть собственный основной сервер, но все они используют один и тот же сервер аварийного переключения. Мой балансировщик нагрузки настроен на отправку всего трафика на основной сервер каждого веб-сайта. Только если этот основной сервер выйдет из строя, балансировщик нагрузки будет отправлять трафик на сервер аварийного переключения.
Для каждого веб-сайта у меня есть отдельный файл конфигурации nginx на балансировщике нагрузки, который похож на этот:
upstream website {
server 1.2.3.4 fail_timeout=3s max_fails=3 weight=10000;
server 4.3.2.1;
}
server {
listen 80;
server_name www.websitename.com;
client_max_body_size 150M;
location / {
proxy_pass http://website;
}
}
server {
listen 80;
server_name websitename.com;
client_max_body_size 150M;
location / {
proxy_pass http://website;
}
}
С этим конфигурационным файлом все работает нормально. Весь трафик отправляется на основной сервер, если основной сервер выходит из строя, трафик будет отправлен на сервер аварийного переключения.
Проблема связана с отказоустойчивым сервером. У меня есть пять разных веб-сайтов на отказоустойчивом сервере, все со своим собственным отдельным файлом конфигурации nginx в каталоге sites-available. Проблема в том, что когда трафик отправляется на сервер аварийного переключения, nginx показывает первый доступный файл конфигурации и связанный веб-сайт, а не правильный веб-сайт.
Каждый файл конфигурации веб-сайта на отказоустойчивом сервере выглядит так, как файл конфигурации ниже. Конечно, у каждого свой URL-адрес и корневой каталог, но это единственное различие. В этом случае я сопоставил пример файла конфигурации, который будет связан с примером файла конфигурации балансировщика нагрузки:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/websitename;
index index.php;
server_name websitename.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Кроме того, я не уверен, имеет ли это значение, но запись A DNS для веб-сайта настроена так, чтобы указывать на балансировщик нагрузки.
Я совершенно уверен, что проблема заключается в файлах конфигурации веб-сайта для отработки отказа, но я не знаю, что не так. Буду признателен за любую помощь, спасибо.
Похоже, я нашел ответ на это.
Мне нужно было добавить строку proxy_set_header Host $ host; прямо под строками proxy_pass в моих файлах конфигурации балансировщика нагрузки.