如何在Linux中安装并配置Nginx负载均衡 Linux实现Web集群的方法

如何在Linux中安装并配置Nginx负载均衡 Linux实现Web集群的方法

系统教程

Nginx负载均衡无需独立安装,由内置upstream模块配合反向代理实现;默认支持轮询、加权轮询、least_conn、ip_hash等策略,验证用nginx -V | grep upstream,配置应置于http块内且推荐单独conf文件。

直接上结论:Nginx 负载均衡不是独立安装的组件,而是通过 upstream 模块 + 反向代理配置实现的;只要 Nginx 已安装(且非极简编译版),就天然支持轮询、加权轮询、least_connip_hash 等核心策略——不需要额外插件或服务。

确认 Nginx 是否已启用 upstream 模块

Nginx 官方稳定版(1.12+)默认内置 upstreamproxy_pass,但某些精简包(如部分 Alpine 镜像或自编译未加 --with-http_upstream_module)可能缺失。验证方式很简单:

  • 运行 nginx -V 2>&1 | grep -o with-http_upstream_module,有输出即支持
  • 若报错 unknown directive "upstream",说明模块未启用,需重装或重新编译
  • Ubuntu/Debian 的 apt install nginx、CentOS 的 yum install nginx 默认都包含该模块

在 /etc/nginx/conf.d/ 下单独建负载均衡配置文件

别硬改 /etc/nginx/nginx.conf 主文件——容易被系统更新覆盖,也难维护。推荐做法是:

  • 新建 /etc/nginx/conf.d/load-balance.conf(文件名任意,但必须以 .conf 结尾)
  • 确保该目录已被 include /etc/nginx/conf.d/*.conf; 引入(检查主配置中是否有这行)
  • upstream 必须定义在 http 块内,不能放在 serverlocation
  • 示例最小可用配置:
upstream backend {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}
server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

不同调度策略的关键参数和坑点

策略选错会导致会话丢失、连接堆积或权重失效,不是写上 weight=5 就真能分到 5 倍流量:

Docker Desktop(linux)

当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。

下载

  • round robin(默认):不写任何关键字,但一旦加了 weight,就自动切换为加权轮询;注意 weight 是相对值,weight=3weight=1 的比例是 3:1,不是绝对请求数
  • least_conn:必须显式写在 upstream 开头,且只对「当前活跃连接数」敏感,不感知后端响应延迟;长连接多时效果明显,短平快接口反而不如轮询
  • ip_hash:客户端 IP 经哈希后固定映射,但 IPv4 NAT 环境下(如公司出口统一公网 IP)会导致所有请求打到同一台后端,慎用;IPv6 下哈希基于完整地址,更可靠
  • 健康检查不是默认开启的:max_fails=2 fail_timeout=30s 才算基础兜底,否则某台后端挂了,Nginx 还会持续转发 30 秒以上

测试与重载必须分两步,跳过会静默失败

systemctl reload nginx 看似一步到位,但实际跳过了语法校验——如果配置有误,reload 会失败且不报错(日志里只有 failed to reload),前端请求直接 502。正确流程是:

  • 先执行 nginx -t:成功返回 nginx: configuration file /etc/nginx/nginx.conf test is successful
  • 再执行 systemctl reload nginxnginx -s reload
  • 检查后端是否真实收到请求:curl -I http://your-nginx-ip 看响应头中的 X-Upstream-Addr(需自行加 proxy_set_header X-Upstream-Addr $upstream_addr;)或直接在后端查 access log
  • 防火墙常被忽略:CentOS/RHEL 默认 blocking 80 端口,记得 firewall-cmd --permanent --add-service=http 并 reload

真正容易被忽略的是:Nginx 的负载均衡只管 HTTP 层(7 层),如果你后端跑的是 gRPC、WebSocket 或 MySQL,得用 stream 模块另配 TCP 转发,那又是另一套语法和监听逻辑了。

本文地址:https://www.sztg.com.cn/article/676599.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢