目录

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 服务。