在日常搭建私有云和容器化服务时,我们经常需要配置 Nginx 反向代理。这套基于 DPanel 容器管理环境整理的 Nginx 配置文件,不仅完美支持 HTTP/2、SSL/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";
}
💡 核心亮点与技术细节
- Cloudflare CDN 兼容的重定向逻辑:通过检测
$http_cf_ray标头,智能判断请求是否来自 Cloudflare。如果开启了 CDN 代理,则跳过本地的80 -> 443强制重定向,有效避免在使用 Cloudflare “Flexible(弹性)”或特定 SSL 模式时引发的 ERR_TOO_MANY_REDIRECTS(无限重定向循环) 错误。 - WebSocket / WSS 原生支持:单独配置了
/ws/路径的location,显式声明了Upgrade和Connection "Upgrade"头,并将超时时间延长至3600s,满足网页终端、实时消息推送或长连接应用的需求。 - 现代化 SSL 安全配置:
- 启用高版本的
TLSv1.2和TLSv1.3,禁用不安全的旧协议。 - 引入现代安全的密码套件 (
ECDHE+AESGCM)。 - 自动附加 HSTS 安全响应头,提升网站整体安全评级。
- 启用高版本的
🚀 快速新增站点指南(“三步复用法”)
未来如果需要为其他容器服务新增一个域名,只需复制此配置文件,并修改代码中的 3 处 ※ 标记 即可快速搞定:
- ※1 修改域名:将
server_name更改为你的新域名(如your_domain.com)。 - ※2 修改证书路径:将
ssl_certificate和ssl_certificate_key指向对应新域名的 SSL 证书文件目录。 - ※3 修改上游容器:将 proxy_pass 中的后端容器内网地址和端口(如 http://你的容器服务名.pod.dpanel.local:端口号)替换为你的实际服务地址。