Nginx配置模板:支持 WebSocket、SSL 与 Cloudflare 智能重定向

在日常搭建私有云和容器化服务时,我们经常需要配置 Nginx 反向代理。这套基于 DPanel 容器管理环境整理的 Nginx 配置文件,不仅完美支持 HTTP/2SSL/TLS 安全策略,还针对 WebSocket (WSS) 协议进行了深度优化,同时完美兼容 Cloudflare CDN 加速下的全站 HTTPS 访问。

📋 完整 Nginx 配置文件

建议将以下完整代码保存为 /dpanel/nginx/proxy_host/your_domain.conf

# 增加WebSocket连接处理WSS协议支持
# /防止重定向nginx配置
# /dpanel/nginx/proxy_host/blog.255556.xyz.conf
# 若再新增域名:复制本文件 → 改 3 处※标记即可

server {
    listen 80;
    listen 443 ssl; # 兼容新旧版
    http2 on; # 1.25+ 正式指令,旧版无害
    
    server_name rss.255556.xyz; # ※1 新域名
    
    ssl_certificate /dpanel/acme/*.255556.xyz_ecc/fullchain.cer; # ※2 证书
    ssl_certificate_key /dpanel/acme/*.255556.xyz_ecc/*.255556.xyz.key; 
    
    # 共享内存区:因 nginx.conf 已声明,此处**重复**需禁用以避免冲突
    # ssl_session_cache shared:SSL_CACHE:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE+AESGCM:EDH+AESGCM;
    ssl_prefer_server_ciphers off;
    ssl_session_timeout 24h;

    # 80→443 重定向配置,仅对直连生效(不走 CF 时)
    if ($scheme = http) {
        set $need_jump 1;
    }
    if ($http_cf_ray) {
        set $need_jump 0;
    }
    if ($need_jump = 1) {
        return 301 https://$host$request_uri;
    }

    # 普通HTTP请求处理
    location / {
        proxy_pass http://freshrss.pod.dpanel.local:80; # ※3 上游容器
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https; # 防 WP 循环重定向
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }

    # WebSocket连接处理
    location /ws/ {
        proxy_pass http://freshrss.pod.dpanel.local:80;
        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-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        # 延长超时时间,适应SSH长连接
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }

    # 基础安全头
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
}

💡 核心亮点与技术细节

  1. Cloudflare CDN 兼容的重定向逻辑:通过检测 $http_cf_ray 标头,智能判断请求是否来自 Cloudflare。如果开启了 CDN 代理,则跳过本地的 80 -> 443 强制重定向,有效避免在使用 Cloudflare “Flexible(弹性)”或特定 SSL 模式时引发的 ERR_TOO_MANY_REDIRECTS(无限重定向循环) 错误。
  2. WebSocket / WSS 原生支持:单独配置了 /ws/ 路径的 location,显式声明了 UpgradeConnection "Upgrade" 头,并将超时时间延长至 3600s,满足网页终端、实时消息推送或长连接应用的需求。
  3. 现代化 SSL 安全配置
    • 启用高版本的 TLSv1.2TLSv1.3,禁用不安全的旧协议。
    • 引入现代安全的密码套件 (ECDHE+AESGCM)。
    • 自动附加 HSTS 安全响应头,提升网站整体安全评级。

🚀 快速新增站点指南(“三步复用法”)

未来如果需要为其他容器服务新增一个域名,只需复制此配置文件,并修改代码中的 3 处 ※ 标记 即可快速搞定:

  • ※1 修改域名:将 server_name 更改为你的新域名(如 your_domain.com)。
  • ※2 修改证书路径:将 ssl_certificatessl_certificate_key 指向对应新域名的 SSL 证书文件目录。
  • ※3 修改上游容器:将 proxy_pass 中的后端容器内网地址和端口(如 http://你的容器服务名.pod.dpanel.local:端口号)替换为你的实际服务地址。

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注