1. 反向代理进阶配置

反向代理不仅可以简单转发请求,还支持设置请求头、超时、负载均衡等。

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend-server:8080;

        # 传递客户端真实IP
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;

        # 超时设置
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;

        # 关闭缓存,确保实时请求
        proxy_buffering off;
    }
}

2. 负载均衡配置示例

实现简单的轮询负载均衡,多个后端服务器分担请求压力。

upstream backend_pool {
    server backend1.example.com weight=3;  # 权重为3,请求量较多
    server backend2.example.com;
    server backend3.example.com;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://backend_pool;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

负载均衡策略

  • 轮询(默认):按顺序依次分发请求
  • 权重(weight):根据权重值分配请求比例
  • IP哈希(ip_hash):同一客户端IP总是发到同一台服务器
  • 最少连接数(least_conn):优先将请求发给连接数最少的服务器

示例启用 ip_hash:

upstream backend_pool {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

3. HTTPS 与 SSL 配置

开启 HTTPS,增强数据传输安全。

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

# 将 HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

4. 缓存配置示例

利用 proxy_cache 缓存后端响应,减少服务压力。

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name cache.example.com;

    location / {
        proxy_pass http://backend-server;

        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;

        # 不缓存 Set-Cookie
        proxy_ignore_headers Set-Cookie;

        proxy_cache_use_stale error timeout updating;
    }
}

5. 安全防护配置示例

限制访问、限速、阻挡恶意请求。

# 简单限速:每秒最多10个请求,突发20个
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    listen 80;
    server_name secure.example.com;

    location / {
        limit_req zone=one burst=20 nodelay;

        # 阻止访问 .git 目录
        location ~ /\.git {
            deny all;
        }

        # 允许特定 IP 访问管理接口
        location /admin {
            allow 192.168.1.100;
            deny all;
        }
    }
}

6. 日志格式与访问控制

自定义日志格式,方便分析。

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

根据来源 IP 选择性禁止访问:

server {
    listen 80;
    server_name example.com;

    location / {
        deny 192.168.1.50;
        allow all;

        root /usr/share/nginx/html;
    }
}

结语

  • Nginx 功能强大,上面的配置仅涵盖常见场景。
  • 实际项目中可结合需求,灵活使用反向代理、缓存、负载均衡、限流等功能。
  • 每次修改请务必通过 nginx -t 测试配置,避免服务中断。
  • 推荐配合 systemctl reload nginx 实现无缝重载。
作者:admin  创建时间:2025-10-20 16:22
最后编辑:admin  更新时间:2025-10-20 16:26