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
二、nginx 核心配置
2.1 文件结构准备
# 创建证书存放目录 sudo mkdir -p /etc/nginx/ssl/ # 上传证书文件到指定位置 sudo cp www.zhegepai.cn.pem /etc/nginx/ssl/www.zhegepai.cn.pem sudo 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 | 允许的 tls 协议版本 | tlsv1.2 tlsv1.3 |
ssl_ciphers | 加密套件白名单 | ecdhe 系列优先 |
ssl_session_cache | 会话缓存提升性能 | shared:ssl:10m |
add_header | 添加 hsts 等安全响应头 | 根据业务需求调整 |
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 证书有效期,保持服务安全稳定。
到此这篇关于nginx 配置 https 与 wss 完整指南的文章就介绍到这了,更多相关nginx 配置 https 与 wss内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论