我有五个网站和三台服务器,全部运行 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;
}
}
使用该配置文件,一切都会正常工作。所有流量都会发送到主服务器,如果主服务器出现故障,流量将被发送到故障转移服务器。
问题出在故障转移服务器上。我在故障转移服务器上有五个不同的网站,它们在 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; 。