Nginx 配置 HTTPS 与 WSS 完整指南_nginx wss
Nginx 配置 HTTPS 与 WSS 完整指南
本教程将手把手教你如何为网站配置 HTTPS 加密访问,并通过反向代理实现安全的 WebSocket(WSS)通信。以 https://www.zhegepai.cn 域名为例,完整流程约需 30 分钟完成。
一、前置准备
1.1 域名注册(示例)
• 已注册域名:www.zhegepai.cn
• 确认域名已解析到服务器 IP
• 推荐 DNS 检查工具:dig www.zhegepai.cn
或 DNS Checker
1.2 SSL 证书获取
• 免费证书:推荐使用 Let’s Encrypt 通过 Certbot 工具自动签发
• 商业证书:阿里云/腾讯云等平台购买(示例使用)
• 最终需要两个文件:
• 证书链文件:www.zhegepai.cn.pem
• 私钥文件:www.zhegepai.cn.key
配置dns解析
- www和@解析到ip,支持www和无www的直接域名访问
- 自动生成的_dnsauth的TXT类型记录值***************
二、Nginx 核心配置
2.1 文件结构准备
# 创建证书存放目录sudo mkdir -p /etc/nginx/ssl/# 上传证书文件到指定位置sudo cp www.zhegepai.cn.pem /etc/nginx/ssl/www.zhegepai.cn.pemsudo cp www.zhegepai.cn.key /etc/nginx/ssl/www.zhegepai.cn.key
2.2 主配置文件 /etc/nginx/nginx.conf
# 用户权限配置user nginx;worker_processes auto;pid /run/nginx.pid;# 动态模块加载include /usr/share/nginx/modules/*.conf;events { worker_connections 1024;}http { # 基础日志格式 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; # 性能优化参数 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; # HTTPS 服务器配置 server { listen 443 ssl http2; server_name www.zhegepai.cn; root /var/www/EasyTools; # SSL 证书配置 ssl_certificate /etc/nginx/ssl/www.zhegepai.cn.pem; ssl_certificate_key /etc/nginx/ssl/www.zhegepai.cn.key; # 安全协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # WebSocket 代理配置 location /ws { proxy_pass http://127.0.0.1:8765; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; proxy_set_header Host $host; proxy_read_timeout 86400s; } # 安全响应头 add_header Strict-Transport-Security \"max-age=31536000\" always; add_header X-Content-Type-Options \"nosniff\" always; add_header X-Frame-Options \"SAMEORIGIN\" always; } # HTTP 重定向配置 server { listen 80; server_name www.zhegepai.cn; return 301 https://$host$request_uri; }}
三、关键配置解析
3.1 HTTPS 强化配置
ssl_protocols
ssl_ciphers
ssl_session_cache
add_header
3.2 WebSocket 反向代理
location /ws { proxy_pass http://localhost:8765; # 本地 WS 服务端口 proxy_http_version 1.1; # 必须使用 HTTP/1.1 proxy_set_header Upgrade $http_upgrade; # 协议升级 proxy_set_header Connection \"upgrade\"; # 保持长连接 proxy_read_timeout 86400s; # 24小时超时防止断开}
四、部署与测试
4.1 服务端操作
# 语法检查sudo nginx -t# 重载配置sudo systemctl reload nginx# 查看运行状态sudo systemctl status nginx
4.2 客户端测试
Https测试,浏览器打开:https://www.zhegepai.cn
WSS测试脚本,创建 test-wss.html
:
<!DOCTYPE html><html><head> <title>WSS 连接测试</title></head><body> <h1 id=\"status\">测试中...</h1> <script> const socket = new WebSocket(\'wss://www.zhegepai.cn/ws\'); socket.onopen = () => { document.getElementById(\'status\').textContent = \'[成功] 连接已建立: \' + socket.url; }; socket.onerror = (error) => { document.getElementById(\'status\').textContent = \'[失败] 连接错误: \' + error.type; }; </script></body></html>
本地双击浏览器直接打开测试:
—
五、常见问题排查
5.1 证书相关错误
# 检查证书路径权限ls -l /etc/nginx/ssl/# 应显示 -rw-r--r-- 权限# 验证证书链完整性openssl verify -CAfile www.zhegepai.cn.pem www.zhegepai.cn.pem
5.2 WebSocket 连接失败
# 在 location /ws 中添加调试日志proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log /var/log/nginx/ws-access.log main;
5.3 性能优化建议
- 启用 OCSP Stapling 减少 SSL 握手时间
- 配置 SSL 会话票据(tickets)提升复用率
- 使用
nginx -V
确认编译时启用了 HTTP/2 模块
通过本文的配置,您的网站将获得:
• 全站 HTTPS 加密传输
• 安全的 WebSocket 通信
• A+ 等级的 SSL Labs 测试评分
• 防御常见 Web 攻击的能力
实际部署时请根据业务需求调整超时时间、CSP 策略等参数。建议每 3 个月检查 SSL 证书有效期,保持服务安全稳定。