在现代Web架构中,Nginx反向代理几乎是标配。它不仅能提升性能和安全性,还能实现负载均衡、SSL终止、静态资源缓存等高级功能。但很多人对Nginx的配置只停留在”复制粘贴”层面,出了问题不知道怎么排查。本文从基础到进阶,系统讲解Nginx反向代理的核心配置。
为什么需要Nginx反向代理
Nginx反向代理是现代Web架构中最常用的部署方式之一。它可以将客户端请求转发到后端的多个应用服务器,实现负载均衡、SSL终止、静态资源缓存等功能。相比直接暴露应用服务端口,反向代理架构更安全、更灵活、性能更好。
基础反向代理配置
最基础的反向代理配置非常简单,只需在server块中添加location规则:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
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_set_header X-Forwarded-Proto $scheme;
}
}
其中proxy_pass指定后端服务地址,proxy_set_header传递客户端真实IP和协议信息,这对后端应用获取用户IP非常重要。
配置HTTPS
申请SSL证书
使用Certbot自动申请和续期Let’s Encrypt免费证书:
yum install -y certbot python3-certbot-nginx
certbot --nginx -d yourdomain.com -d www.yourdomain.com
强制HTTPS跳转
配置80端口自动跳转到443:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
安全头部配置
在HTTPS的server块中添加安全响应头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
负载均衡配置
当后端有多个应用实例时,使用upstream定义服务器组:
upstream backend {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=2;
server 127.0.0.1:3002 backup;
keepalive 32;
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
weight设置权重,backup标记为备用服务器,keepalive启用长连接减少握手开销。
缓存与静态资源优化
- 静态文件直接处理——Nginx直接返回图片、CSS、JS等静态文件,不转发给后端
- 浏览器缓存——通过expires指令设置静态资源缓存时间
- Gzip压缩——开启gzip压缩,减少传输体积
- 代理缓存——对动态页面结果进行缓存,减轻后端压力
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;
WebSocket支持
如果后端使用WebSocket(如在线聊天、实时推送),需要额外配置:
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
性能调优参数
| 参数 | 建议值 | 说明 |
| worker_processes | auto | 自动匹配CPU核心数 |
| worker_connections | 65535 | 单进程最大连接数 |
| client_max_body_size | 50m | 最大上传文件大小 |
| proxy_connect_timeout | 60s | 后端连接超时 |
配置完成后用nginx -t检查语法,无误后nginx -s reload重载生效。