Nginx反向代理配置指南
Nginx 是最流行的 Web 服务器和反向代理,掌握其配置是运维必备技能。
基本配置结构
nginx
# /etc/nginx/nginx.conf
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;
include /etc/nginx/conf.d/*.conf;
}反向代理
nginx
server {
listen 80;
server_name api.example.com;
# 代理到 Node.js 后端
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
}
# 静态文件
location /static/ {
alias /var/www/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
}负载均衡
nginx
upstream backend {
# 轮询(默认)
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
# 权重
# server 127.0.0.1:3001 weight=3;
# server 127.0.0.1:3002 weight=1;
# IP 哈希(会话保持)
# ip_hash;
# 最少连接
# least_conn;
# 健康检查
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}SSL/HTTPS 配置
nginx
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL 优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
}
# HTTP 跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}常用 location 匹配
nginx
# 精确匹配(优先级最高)
location = /favicon.ico {
return 204;
}
# 前缀匹配
location /static/ {
alias /var/www/static/;
}
# 正则匹配(区分大小写)
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
# 正则匹配(不区分大小写)
location ~* .(jpg|jpeg|png|gif|css|js)$ {
expires 30d;
}速率限制
nginx
# 定义限速区域
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://backend;
}
}总结
Nginx 配置的核心在于 server、location 和 upstream 三个指令块。反向代理注意传递正确的请求头,负载均衡根据场景选择调度算法,SSL 配置启用 TLS 1.2+ 和 HSTS。配合 gzip、缓存和限速,可以构建高性能的 Web 服务。



评论 1