插件窝 干货文章 Nginx反向代理设置域名,优雅实现转发

Nginx反向代理设置域名,优雅实现转发

proxy server example Nginx 317    来源:    2025-04-16

Nginx反向代理域名设置指南

基本反向代理配置

server {
    listen 80;
    server_name example.com;

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

高级配置选项

1. HTTPS支持

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backend_server_ip:port;
        # 其他代理头设置...
    }
}

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

2. 多域名代理

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

    location / {
        if ($host = "api.example.com") {
            proxy_pass http://api_server_ip:port;
        }
        if ($host = "example.com") {
            proxy_pass http://web_server_ip:port;
        }
        # 其他代理头设置...
    }
}

3. WebSocket支持

location /ws/ {
    proxy_pass http://websocket_server;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
}

4. 负载均衡

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;

    # 可选负载均衡算法
    # least_conn;  # 最少连接
    # ip_hash;     # IP哈希
}

server {
    location / {
        proxy_pass http://backend;
        # 其他代理头设置...
    }
}

常见问题解决方案

1. 502 Bad Gateway错误

  • 检查后端服务是否运行
  • 增加代理超时设置: nginx proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s;

2. 413 Request Entity Too Large

client_max_body_size 100M;  # 设置允许的最大请求体大小

3. 缓存控制

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;

server {
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        # 其他代理设置...
    }
}

最佳实践

  1. 安全头设置

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    
  2. 日志记录

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
    
  3. 性能优化

    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 16k;
    proxy_busy_buffers_size 32k;
    
  4. 健康检查(商业版):

    upstream backend {
       zone backend 64k;
       server backend1.example.com slow_start=30s;
       server backend2.example.com;
    
       health_check interval=5s fails=3 passes=2 uri=/health;
    }
    

通过以上配置,您可以实现一个高效、安全且功能丰富的Nginx反向代理服务。