统信uos上配置nginx负载均衡有五种方法:一、基于系统源安装的upstream基础配置;二、自编译启用ip_hash等高级特性;三、动态模块扩展健康检查;四、sticky模块实现会话保持;五、多级upstream与fallback容错机制。

如果您已在统信UOS上成功安装并运行Nginx,但需要将客户端请求分发至多个后端服务器以提升可用性与处理能力,则需配置upstream模块实现负载均衡。以下是多种可行的配置方法:
一、基于系统源安装Nginx后的upstream基础配置
此方法适用于已通过apt安装官方仓库版本Nginx的场景,利用默认配置结构在/etc/nginx/conf.d/下新增独立负载均衡配置文件,避免修改主配置,便于维护与隔离。
1、创建专用配置文件:sudo nano /etc/nginx/conf.d/loadbalance.conf
2、写入upstream块与server块组合配置:
3、在文件中输入以下内容(示例含三台后端服务):
upstream backend_cluster {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 max_fails=2 fail_timeout=30s;
}
4、添加server监听段落:
server {
listen 80;
server_name lb.uos.local;
location / {
proxy_pass http://backend_cluster;
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_connect_timeout 10;
proxy_send_timeout 15;
proxy_read_timeout 15;
}
}
5、保存退出后执行语法检测:sudo nginx -t
6、重载配置使生效:sudo systemctl reload nginx
二、使用自编译Nginx启用高级负载均衡特性
当需要支持ip_hash、least_conn、sticky模块或第三方模块(如nginx-sticky-module-ng)时,官方源版Nginx通常不内置这些功能,必须通过源码编译方式安装并显式启用。
1、安装编译依赖:sudo apt install build-essential libpcre3-dev libssl-dev zlib1g-dev libgd-dev libxml2-dev
2、下载Nginx源码包(以1.25.3为例):wget https://nginx.org/download/nginx-1.25.3.tar.gz
3、解压并进入目录:tar -zxvf nginx-1.25.3.tar.gz && cd nginx-1.25.3
4、配置编译选项(含ip_hash及健康检查支持):
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-stream \
--with-stream_ssl_module
5、编译并安装:make && sudo make install
6、创建systemd服务文件并启用:sudo cp /usr/local/nginx/sbin/nginx /usr/local/bin/ && sudo systemctl daemon-reload
7、编辑其主配置文件:sudo nano /usr/local/nginx/conf/nginx.conf
8、在http块内添加带health_check的upstream:
upstream backend_hc {
zone backend_hc 64k;
server 192.168.1.110:8080;
server 192.168.1.111:8080;
health_check interval=5 fails=3 passes=2;
}
三、通过动态模块方式扩展已有Nginx负载均衡能力
若已部署系统源版Nginx且无法重新编译,可采用动态加载模块方式引入额外负载策略,例如添加nginx-upstream-check-module以实现主动健康探测。
1、确认当前Nginx版本与构建参数:nginx -V 2>&1 | grep -o 'configure arguments.*'
2、下载对应版本的nginx-upstream-check-module源码,并解压至Nginx源码目录的modules子目录下。
3、重新配置Nginx编译参数,加入--add-dynamic-module=./modules/nginx-upstream-check-module
4、执行make不执行make install,仅生成so模块文件:make modules
5、复制生成的ngx_http_upstream_check_module.so至模块目录:sudo cp objs/ngx_http_upstream_check_module.so /usr/lib/nginx/modules/
6、在nginx.conf的main块中加载模块:load_module /usr/lib/nginx/modules/ngx_http_upstream_check_module.so;
7、在upstream块中启用检查指令:
upstream dynamic_backend {
server 192.168.1.120:8080;
server 192.168.1.121:8080;
check interval=3 rise=2 fall=5 timeout=1 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
8、测试并重载:sudo nginx -t && sudo systemctl reload nginx
四、配置基于cookie的会话保持(sticky session)
针对有状态应用(如PHP Session、Java HttpSession),需确保同一客户端请求始终路由至同一后端节点,避免会话丢失。统信UOS上可借助nginx-sticky-module-ng实现该能力。
1、获取并编译nginx-sticky-module-ng模块源码,适配当前Nginx版本。
2、在upstream定义中启用sticky指令:
upstream sticky_backend {
sticky name=route expires=1h domain=.uos.local path=/;
server 192.168.1.130:8080;
server 192.168.1.131:8080;
server 192.168.1.132:8080;
}
3、确保proxy_pass指向该upstream名称,且不启用proxy_redirect default等覆盖原始Set-Cookie头的操作。
4、在location块中添加header透传规则(如需保留原始Cookie):
proxy_cookie_path / "/; Secure; HttpOnly; SameSite=Lax";
5、验证响应头中是否携带route=xxx格式的Set-Cookie字段:curl -I http://lb.uos.local
五、配置多层级upstream嵌套与fallback容错机制
为应对核心后端集群整体不可用的情况,可定义两级upstream:主集群失败后自动降级至备用集群,提升系统韧性。
1、在http块中定义主备两个upstream块:
upstream primary_pool {
server 192.168.2.10:8080;
server 192.168.2.11:8080;
server 192.168.2.12:8080;
}
upstream fallback_pool {
server 192.168.2.20:8080 backup;
server 192.168.2.21:8080 backup;
}
2、合并为统一逻辑upstream:
upstream resilient_backend {
server 192.168.2.10:8080;
server 192.168.2.11:8080;
server 192.168.2.12:8080;
server 192.168.2.20:8080 backup;
server 192.168.2.21:8080 backup;
}
3、在location中使用该名称进行proxy_pass转发。
4、设置全局error_page捕获502/503/504错误并跳转至备用路径(可选):
error_page 502 503 504 /fallback.html;
location = /fallback.html {
root /usr/share/nginx/html;
internal;
}
5、将fallback.html页面置于指定路径下供降级展示。











