我在nginx负载均衡配置中遇到过这个问题。负载平衡服务器不想转发到任何后端服务器。
我将服务器配置设置如下:
Hostname ip_address role
nginx-node1.phann.net 172.17.45.103 nginx webserver
nginx-node2.phann.net 172.17.45.107 nginx webserver
nginx-node3.phann.net 172.17.45.108 nginx webserver
phann.net 172.17.45.113 load balancer
我的负载均衡器配置在“/etc/nginx/conf.d/load-balancer.conf“, 使用vhost
,写成如下:
upstream website {
server nginx-node1.phann.net;
server nginx-node2.phann.net;
server nginx-node3.phann.net;
}
server {
listen 80; # Listen on the external interface
location / {
proxy_pass http://website;
}
}
另外我还有PHP 启用在每个服务器中。我的配置没问题,没有任何错误。
作为替代配置,我还尝试用 IP 地址替换主机名。
upstream website {
server 172.17.45.103;
server 172.17.45.107;
server 172.17.45.108;
}
server {
listen 80; # Listen on the external interface
location / {
proxy_pass http://website;
}
}
最后当我测试负载均衡服务器时,它总是显示nginx的默认网页,直到节点3才转发到节点1。但我已经检查过一切都合适。我想知道我在配置中缺少哪一部分或犯了错误。我做了很多研究,但仍然不明白为什么”上游“ 不管用。
答案1
NGinx 负载均衡器配置正常。
问题是你没有在 DNS 和 NGinx 中获取名称,或者至少默认情况下没有像其他 Linux 应用程序那样从 DNS 解析器proxy_pass
获取名称。/etc/hosts
看proxy_pass 不使用 /etc/hosts 解析 DNS
如果您不处理虚拟主机,一种比该链接中建议的更简单的临时解决方案是在 NGinx 配置中,使用 IP 地址而不是 FQDN。
答案2
从问题中提取,因为这是一个答案:
然后,我发现了问题所在。因为我/etc/nginx/nginx.conf
默认离开,所以脚本有双重定义server {..}
。
原来,server {..}
中的脚本必须被删除或注释掉,这样脚本中/etc/nginx/nginx.conf
的声明才能运行。server {..}
/etc/nginx/conf.d/load-balancer.conf