Nginx 负载均衡器在故障转移服务器上显示错误站点

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;
        }
}

使用该配置文件,一切都会正常工作。所有流量都会发送到主服务器,如果主服务器出现故障,流量将被发送到故障转移服务器。

问题出在故障转移服务器上。我在故障转移服务器上有五个不同的网站,它们在 sites-available 目录中都有自己独立的 nginx 配置文件。问题是,当流量发送到故障转移服务器时,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;                          
        }
}

另外,我不确定这是否重要,但该网站的 DNS A 记录设置为指向负载均衡器。

我确信问题出在故障转移网站配置文件上,但我不知道问题出在哪里。如能得到任何帮助,我将不胜感激,谢谢。

答案1

看起来我找到了这个问题的答案。

我需要在负载均衡器配置文件中的 proxy_pass 行下方添加行 proxy_set_header Host $host; 。

相关内容