nginx负载均衡不起作用

nginx负载均衡不起作用

我在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。但我已经检查过一切都合适。我想知道我在配置中缺少哪一部分或犯了错误。我做了很多研究,但仍然不明白为什么”上游“ 不管用。

我正在使用以下教程: http://www.itadminstrator.com/2017/07/how-to-configure-nginx-load-balancer-on.html?showComment=1516785023396

答案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

相关内容