![为什么我的 Nginx 负载均衡器仅代理到第一台服务器?](https://linux22.com/image/746211/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20Nginx%20%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E4%BB%85%E4%BB%A3%E7%90%86%E5%88%B0%E7%AC%AC%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我有一个使用 Nginx 的负载均衡器黑客服务器教程网站。这指的是循环设置中的两个服务器。我有一个自签名SSL
证书来测试http
重定向https
。
当我访问负载均衡器的 IP 地址时,请求仅转发到upstream app
块中的第一个 IP 地址。我希望将其分成 50/50。
查看配置文件,有人可以告诉我该怎么做吗?这些都是 Amazon ec2 实例。
重定向从 到 进行http
,https
代理到第一个服务器进行工作。
upstream app {
server 172.31.33.5:80 weight=1;
server 172.31.42.208:80 weight=1;
}
server {
listen 80 default_server;
# Requests to /.well-known should look for local files
location /.well-known {
root /var/www/html;
try_files $uri $uri/ =404;
}
# All other requests get load-balanced
location / {
return 301 https://$http_host$request_uri;
}
}
server {
listen 443 ssl default_server;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 24h;
keepalive_timeout 300s;
ssl_certificate /etc/pki/tls/certs/load_balance.crt;
ssl_certificate_key /etc/pki/tls/certs/load_balance.key;
charset utf-8;
location / {
include proxy_params;
proxy_pass http://app;
proxy_redirect off;
# Handle Web Socket connections
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
答案1
我同意 Sergey 的观点。很有可能是防火墙出了问题,导致某台服务器无法获得流量,从而导致 nginx 将其从可用服务器池中移除。
答案2
weight=1
是默认配置,因此明确指定它或隐式删除和拥有它都不会产生任何区别。
总体而言,您的配置看起来正确。
尝试从上游列表中删除正在运行的服务器,只留下一个不起作用的服务器。我怀疑由于路由或防火墙问题,它根本无法工作。
答案3
虽然没有直接回答你的问题,但解决你的问题的更好方法是使用AWS 应用程序负载均衡器。它是一款功能相当齐全的负载均衡器,适用于从基本到标准的用例。如果您有任何非常具体的要求,您可能需要自行开发。
AWS ALB 是一种高可用性服务,没有单点故障,可跨多个可用区运行。这将使其比单个实例更可靠,并且与运行实例相比更具成本效益。有时它会花费更多,但你会从中受益。
答案4
降低权重=1,它应该可以工作