前言
Nginx 是现代互联网应用的核心基础设施。作为高性能的反向代理和负载均衡器,它在构建分布式系统中发挥了至关重要的作用。本文介绍 Nginx 的核心概念和实际应用。
一、Nginx 基础
1.1 安装与启动
# 安装 Nginx
sudo apt-get install nginx
# 启动 Nginx
sudo systemctl start nginx
# 检查状态
sudo systemctl status nginx
# 验证配置
sudo nginx -t
1.2 配置文件结构
worker_processes auto; # 工作进程数
events {
worker_connections 2048; # 单进程连接数
}
http {
upstream backend { } # 上游服务器
server { } # 虚拟主机
}
二、反向代理
2.1 基本反向代理
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.2 代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m;
location / {
proxy_cache cache;
proxy_cache_valid 200 1h;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
}
三、负载均衡
3.1 轮询(Round Robin)
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
3.2 加权轮询
upstream backend {
server 192.168.1.10:8080 weight=5; # 权重为5
server 192.168.1.11:8080 weight=3; # 权重为3
server 192.168.1.12:8080 weight=1; # 权重为1
}
3.3 IP Hash
同一客户端的请求始终转发到同一后端服务器,适合有会话需求的应用。
upstream backend {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
3.4 Least Connections
转发到当前连接数最少的服务器。
upstream backend {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
四、健康检查
4.1 被动健康检查
upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
4.2 主动健康检查
Nginx Plus 支持主动健康检查(社区版不支持)。
五、SSL/TLS 配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
六、性能优化
- 启用 Gzip 压缩
- 配置合理的缓存策略
- 使用连接复用
- 调整 buffer 大小
- 启用 HTTP/2
七、常用命令
nginx -t # 测试配置
nginx -s reload # 重新加载配置
nginx -s stop # 停止 Nginx
systemctl status nginx # 检查状态
八、最佳实践
- ✅ 配置完善的错误日志和访问日志
- ✅ 使用 HTTPS,升级到 TLS 1.3
- ✅ 定期备份和测试配置
- ✅ 监控 Nginx 进程和资源使用
- ✅ 使用负载均衡而不是单点
总结
Nginx 以其高效、轻量和强大的功能,成为构建高可用系统的首选。掌握反向代理、负载均衡和性能优化,能够构建稳定高效的网络基础设施。