如何在Nginx中通过8080对本地3个端口实现负载均衡?
Nginx负载均衡配置修改方案
你的配置里已经定义了包含8081、8082、8083的后端集群,但8080端口的server块没有将请求转发到这个集群,而是在本地目录/var/www/html下查找文件,这就是负载均衡没生效的核心原因。
修改后的完整配置如下:
upstream backend { server localhost:8081; server localhost:8082; server localhost:8083; } server { listen 8080; listen [::]:8080; server_name _; location / { # 将请求转发到后端集群 proxy_pass http://backend; # 传递请求头信息给后端服务器(可选但推荐) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # 8081端口服务器配置 server { listen 8081 default_server; listen [::]:8081 default_server; root /var/www/n81; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } } # 8082端口服务器配置 server { listen 8082 default_server; listen [::]:8082 default_server; root /var/www/n82; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } } # 8083端口服务器配置 server { listen 8083 default_server; listen [::]:8083 default_server; root /var/www/n83; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } }
关键改动说明
- 移除了8080端口server块里的
root、index和try_files配置,替换为proxy_pass http://backend,让所有发往8080的请求都转发到你定义的后端集群 - 添加的
proxy_set_header指令,是为了把客户端的真实IP、请求协议等信息传递给后端服务器,方便后端做日志记录或业务逻辑处理,这部分可选,但建议保留
配置修改完成后,执行以下命令重启Nginx让配置生效:
sudo nginx -s reload
如果重启失败,可先用nginx -t命令检查配置语法是否有误。
内容的提问来源于stack exchange,提问作者Khadijah Celestine
相关产品推荐
相关产品推荐

