Назад | Перейти на главную страницу

Балансировщик нагрузки Nginx показывает неправильный сайт на отказоустойчивом сервере

У меня пять веб-сайтов и три сервера, на всех работает nginx.

  1. Основной сервер
  2. Балансировщик нагрузки
  3. Сервер аварийного переключения

У каждого веб-сайта есть собственный основной сервер, но все они используют один и тот же сервер аварийного переключения. Мой балансировщик нагрузки настроен на отправку всего трафика на основной сервер каждого веб-сайта. Только если этот основной сервер выйдет из строя, балансировщик нагрузки будет отправлять трафик на сервер аварийного переключения.

Для каждого веб-сайта у меня есть отдельный файл конфигурации 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 в моих файлах конфигурации балансировщика нагрузки.