Nginx最初被设计为高性能的HTTP服务器,其事件驱动架构与传统多线程服务器(如Apache)有本质区别。在Apache的prefork模式下,每个连接都需要独立的进程处理,当并发连接数达到数千时,内存消耗会呈线性增长。而Nginx采用异步非阻塞模型,一个工作进程可以同时处理上万个连接,实测在2GB内存的服务器上就能轻松应对10万级别的并发连接。
静态文件服务配置示例:
nginx复制server {
listen 80;
server_name example.com;
location /static/ {
alias /var/www/static/;
expires 30d; # 设置缓存过期时间
access_log off; # 静态资源关闭访问日志
}
}
经验提示:对于CSS/JS等静态资源,建议配置长期缓存(如30天),同时通过文件名哈希解决缓存更新问题。实测这个优化可使页面加载速度提升40%以上。
反向代理是Nginx最核心的应用场景。与正向代理不同,反向代理对客户端透明,主要实现:
典型配置示例:
nginx复制location /api/ {
proxy_pass http://backend_server_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
避坑指南:务必设置
X-Real-IP头,否则后端服务获取的客户端IP都会是Nginx服务器的IP。曾有个项目因为漏配这个导致安全审计失败。
Nginx支持多种负载均衡算法:
配置示例:
nginx复制upstream backend {
least_conn; # 使用最少连接算法
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080;
server backup.example.com:8080 backup; # 备用服务器
}
实战技巧:线上环境建议至少配置1台backup服务器,当主服务器池全部不可用时自动切换。曾用这个方案在双11期间实现零宕机。
Nginx缓存分为:
优化配置示例:
nginx复制proxy_cache_path /data/nginx/cache 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;
}
}
性能数据:某电商网站接入缓存后,后端压力下降70%,平均响应时间从800ms降至200ms。
对于百万级PV的网站,推荐架构:
code复制客户端 → CDN → Nginx集群 → 应用服务器 → 数据库
其中Nginx承担:
现代微服务架构中,Nginx Plus或OpenResty常作为API网关:
配置示例:
nginx复制location /user/ {
auth_request /auth; # JWT验证
limit_req zone=user burst=5; # 限流
proxy_pass http://user_service;
}
关键安全措施:
nginx复制server_tokens off; # 隐藏Nginx版本
nginx复制limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
nginx复制if ($args ~* "union.*select.*\(") {
return 403;
}
nginx复制worker_processes auto; # 自动匹配CPU核心数
worker_connections 10240; # 每个worker最大连接数
keepalive_timeout 65; # 长连接超时
gzip on; # 启用压缩
bash复制# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 999999
推荐监控指标:
排查步骤:
bash复制tail -f /var/log/nginx/error.log
nginx复制proxy_connect_timeout 5s;
检查方向:
top命令ss -siostat -x 1必查项:
bash复制nginx -t
bash复制nginx -s reload
通过Nginx实现:
nginx复制map $cookie_version $backend {
default "production";
"v2" "canary";
}
upstream production { server 192.168.1.100; }
upstream canary { server 192.168.1.200; }
常用分析命令:
bash复制# 统计访问TOP10
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
# 分析响应时间分布
awk '{print $NF}' access.log | sort -n | uniq -c
使用Lua扩展Nginx功能:
nginx复制location /validate {
access_by_lua_block {
if ngx.var.arg_token ~= "secret" then
ngx.exit(403)
end
}
}
经过多年实战验证,Nginx的稳定性和性能确实令人信赖。最近一个日活千万的项目中,8台Nginx服务器组成的集群平稳支撑了双十一流量高峰,CPU利用率始终保持在60%以下。建议每个运维人员都深入掌握Nginx的各项细节配置,这往往是解决性能问题的关键钥匙。