本文目录导读:

我来详细介绍Nginx反向代理的配置方法。
基础反向代理配置
最简单的反向代理
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000; # 代理到本地的Node.js应用
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;
}
}
常见配置场景
场景1:代理到不同端口
# 将不同路径代理到不同服务
server {
listen 80;
server_name api.example.com;
# API服务
location /api/ {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
}
# 前端服务
location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
}
}
场景2:负载均衡
upstream backend_servers {
# 轮询(默认)
server backend1.example.com weight=3; # weight设置权重
server backend2.example.com weight=2;
server backend3.example.com;
# 其他负载策略
# least_conn; # 最少连接
# ip_hash; # IP哈希(会话保持)
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
场景3:WebSocket代理
server {
listen 80;
server_name ws.example.com;
location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400; # 超时时间设置
}
}
高级配置
配置缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_min_uses 3;
proxy_pass http://localhost:3000;
# 缓存绕过
proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_authorization;
add_header X-Cache-Status $upstream_cache_status;
}
}
HTTPS反向代理
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
常用配置参数说明
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_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 缓冲区设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
# 大小限制
client_max_body_size 10m;
}
配置示例:前后端分离部署
server {
listen 80;
server_name www.example.com;
# 静态资源 - 直接由Nginx处理
location /static/ {
alias /app/static/;
expires 7d;
add_header Cache-Control "public, immutable";
}
# 媒体文件
location /uploads/ {
alias /app/uploads/;
expires 30d;
}
# API请求 - 代理到后端
location /api/ {
proxy_pass http://localhost:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# API限流
limit_req zone=api_limit burst=20 nodelay;
limit_req_status 429;
}
# 前端页面 - 代理到Vue/React开发服务器
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Forwarded-For $remote_addr;
# SPA路由支持
try_files $uri $uri/ /index.html;
}
}
配置检查与重载
# 检查配置语法 nginx -t # 重载配置 nginx -s reload # 重启Nginx systemctl restart nginx
配置注意事项
-
路径处理:
proxy_pass末尾的 很重要proxy_pass http://backend;- 完整路径proxy_pass http://backend/;- 去掉匹配的location路径
-
请求头传递:确保正确设置Host和真实IP
-
超时设置:根据应用需求调整超时时间
-
SSL配置:生产环境必须使用HTTPS
这些配置覆盖了大多数反向代理场景,你可以根据具体需求进行调整。
标签: nginx配置
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。