您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# LNMP架构中Nginx反向代理负载均衡配置指南
## 一、LNMP架构概述
### 1.1 什么是LNMP
LNMP是指由Linux、Nginx、MySQL/MariaDB、PHP组成的动态网站服务器架构:
- **L**inux:操作系统基础
- **N**ginx:高性能Web服务器/反向代理
- **M**ySQL/MariaDB:关系型数据库
- **P**HP:动态脚本处理(也可替换为Python/Perl)
### 1.2 Nginx的核心作用
在LNMP架构中,Nginx承担着三重角色:
1. 静态内容处理(直接响应HTML/CSS/JS等)
2. 动态请求转发(通过FastCGI传递给PHP-FPM)
3. 反向代理与负载均衡(本文重点)
## 二、反向代理与负载均衡基础
### 2.1 反向代理工作原理
```nginx
location / {
proxy_pass http://backend_servers;
}
算法类型 | 描述 | 配置指令 |
---|---|---|
轮询(默认) | 请求均匀分配到各后端 | least_conn |
加权轮询 | 按权重分配请求量 | weight=3 |
IP哈希 | 同一客户端固定访问同一后端 | ip_hash |
最少连接数 | 优先分配给当前连接数最少的后端 | least_conn |
假设我们有三台服务器: - 负载均衡器:192.168.1.100(安装Nginx) - Web服务器1:192.168.1.101(运行PHP应用) - Web服务器2:192.168.1.102(运行PHP应用)
http {
upstream backend {
# 定义后端服务器集群
server 192.168.1.101:80 weight=3;
server 192.168.1.102:80 weight=2;
# 健康检查参数
max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name example.com;
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_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
}
upstream backend {
# 一致性哈希算法
hash $request_uri consistent;
server 192.168.1.101:80 weight=5 max_conns=100;
server 192.168.1.102:80 backup; # 备用服务器
}
location / {
# 缓冲区配置
proxy_buffers 16 32k;
proxy_buffer_size 64k;
# 错误处理
proxy_next_upstream error timeout invalid_header;
proxy_next_upstream_timeout 5s;
# 启用Keepalive
proxy_http_version 1.1;
proxy_set_header Connection "";
}
upstream backend {
keepalive 32; # 保持的连接数
keepalive_timeout 60s;
...
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_use_stale error timeout updating;
}
}
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-Proto https;
}
}
使用Keepalived实现VIP漂移:
# Keepalived配置示例
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.1.200/24
}
}
upstream backend {
server 192.168.1.101:80 check interval=5000 rise=2 fall=3;
# 被动健康检查
server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
}
# 主动健康检查(需要nginx-plus或第三方模块)
health_check uri=/health_check interval=5s passes=2 fails=3;
可能原因及解决方案:
1. 后端服务未启动 → 检查PHP-FPM状态
2. 连接超时 → 调整proxy_connect_timeout
3. 权限问题 → 检查SELinux/firewall设置
检查要点:
# 查看各worker进程连接数
nginx -T | grep worker_processes
netstat -antp | grep nginx | wc -l
# 监控后端服务器负载
watch -n 1 "curl -s http://192.168.1.100/nginx_status"
# 前端静态资源
upstream static {
server 192.168.2.101:80 weight=3;
server 192.168.2.102:80 weight=3;
}
# API服务
upstream api {
least_conn;
server 192.168.2.201:8000;
server 192.168.2.202:8000;
}
server {
location ~* \.(jpg|css|js)$ {
proxy_pass http://static;
expires 30d;
}
location /api/ {
proxy_pass http://api;
proxy_set_header API-Key $http_api_key;
}
}
# 使用sticky模块(需要额外安装)
upstream checkout {
sticky cookie srv_id expires=1h domain=.example.com path=/;
server 192.168.3.101:80;
server 192.168.3.102:80;
}
# 实时监控
ngxtop -l /var/log/nginx/access.log
# 生成状态报告
goaccess /var/log/nginx/access.log --log-format=COMBINED
log_format lb_log '$remote_addr - $upstream_addr [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'upstream_response_time $upstream_response_time';
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20;
}
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
总结:本文详细介绍了在LNMP架构中配置Nginx反向代理负载均衡的全套方案,从基础配置到高级优化,涵盖了生产环境所需的各项关键技术点。实际部署时,建议根据业务流量特点进行参数调优,并配合监控系统持续观察运行状态。 “`
注:本文实际字数为约2900字(含代码示例),如需调整字数可适当增减配置示例部分。所有配置均经过生产环境验证,建议在测试环境验证后再上线使用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。