一、LNMP架构与负载均衡概述
LNMP是指Linux + Nginx + MySQL + PHP的Web架构组合。Nginx作为高性能的反向代理服务器天然支持负载均衡功能,能够将客户端请求分发到多台后端PHP应用服务器,提升系统的整体吞吐量和可用性。
负载均衡的核心价值:
– 高可用性:单台服务器故障不影响整体服务
– 高性能:多台服务器分担负载
– 可扩展:支持水平扩展
– 透明性:对客户端隐藏后端架构细节
二、Nginx负载均衡工作原理
Nginx通过upstream模块实现负载均衡,将请求分发到配置的后端服务器池。
请求处理流程:
1. 客户端发起请求
2. Nginx接收请求
3. 根据负载均衡算法选择后端服务器
4. 转发请求到选定的服务器
5. 后端服务器处理请求
6. Nginx将响应返回给客户端
三、负载均衡算法详解
3.1 轮询(Round Robin)
默认算法,按顺序依次分发请求到每台后端服务器。
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
}
3.2 加权轮询(Weighted Round Robin)
根据权重比例分发请求,性能更强的服务器分配更多请求。
upstream backend {
server 192.168.1.101:80 weight=5;
server 192.168.1.102:80 weight=3;
server 192.168.1.103:80 weight=2;
}
3.3 最少连接(Least Connections)
将请求发送到当前连接数最少的服务器。
upstream backend {
least_conn;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
3.4 IP哈希(IP Hash)
同一IP的请求始终发送到同一台服务器,保证会话粘性。
upstream backend {
ip_hash;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
四、完整配置实战
4.1 基础负载均衡配置
http {
upstream php_cluster {
server 192.168.1.101:9000;
server 192.168.1.102:9000;
server 192.168.1.103:9000;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://php_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;
}
}
}
4.2 PHP-FPM配置
后端PHP服务器需要配置PHP-FPM监听:
; /etc/php-fpm.d/www.conf
listen = 192.168.1.101:9000
listen.allowed_clients = 192.168.1.1
各后端服务器IP地址配置:
| 服务器 | IP地址 | 端口 |
|---|---|---|
| PHP-FPM 1 | 192.168.1.101 | 9000 |
| PHP-FPM 2 | 192.168.1.102 | 9000 |
| PHP-FPM 3 | 192.168.1.103 | 9000 |
4.3 健康检查配置
upstream backend {
server 192.168.1.101:80 max_fails=3 fail_timeout=30s;
server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
server 192.168.1.103:80 max_fails=3 fail_timeout=30s;
}
五、会话保持方案
5.1 IP Hash方案
适用于无状态服务,简单有效。
upstream backend {
ip_hash;
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
5.2 Cookie方案
在Nginx中设置cookie标识后端服务器:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
location / {
proxy_pass http://backend;
# 添加cookie标识
add_header Set-Cookie "route=$upstream_addr";
}
}
5.3 第三方模块
使用nginx-upsync-module动态管理后端节点。
六、SSL终端配置
在负载均衡层终止SSL,实现HTTPS负载均衡:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://php_cluster;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}
七、性能调优
7.1 连接池配置
upstream backend {
server 192.168.1.101:9000;
server 192.168.1.102:9000;
server 192.168.1.103:9000;
keepalive 32;
}
7.2 超时配置
location / {
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
}
八、监控与日志
8.1 监控指标
| 指标 | 说明 |
|---|---|
| 活跃连接数 | 当前处理中的请求数 |
| 失败次数 | 后端服务器失败次数 |
| 响应时间 | 请求到响应的总时间 |
| 流量 | 入站和出站带宽 |
8.2 日志配置
log_format upstream_log '$remote_addr - $upstream_addr - $request_time';
server {
access_log /var/log/nginx/access.log upstream_log;
}
九、常见问题
Q1: 后端服务器全部宕机怎么办?
配置backup服务器作为备份:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 127.0.0.1:8080 backup;
}
Q2: 如何实现灰度发布?
使用cookie或header区分版本:
location / {
if ($cookie_version = "new") {
proxy_pass http://backend_new;
}
proxy_pass http://backend_old;
}
Q3: 如何处理大文件上传?
配置客户端最大body大小:
client_max_body_size 100M;
proxy_read_timeout 300s;
十、总结
Linux LNMP架构通过Nginx实现负载均衡,能够显著提升Web应用的性能和可用性。关键配置包括选择合适的负载均衡算法、配置健康检查、实现会话保持、设置SSL终端等。
掌握这些配置技巧,可以构建一个高性能、高可用的Web服务架构,满足企业级应用需求。
注:本文基于2026年LNMP技术编写,具体配置请以实际环境为准。