Nginx 配置 HTTPS 与 WSS 完整指南(最新推荐)

Nginx 配置 HTTPS 与 WSS 完整指南

一、准备工作
  1. 获取 SSL 证书
  • 从可信机构(如 Let's Encrypt)申请证书
  • 获得以下文件:
    • 域名证书:domain.crt
    • 私钥文件:domain.key
    • 中间证书链:chain.crt
  1. 推荐合并证书链:
bash 复制代码
cat domain.crt chain.crt > fullchain.pem
二、HTTPS 基础配置
nginx 复制代码
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/domain.key;
    
    # 现代加密配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # 其他配置...
}
三、WSS 配置(WebSocket Secure)
nginx 复制代码
location /websocket/ {
    proxy_pass http://backend_server;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    
    # 保持长连接
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
    
    # 传递必要头信息
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
四、最佳实践
  1. 强制 HTTPS 跳转:
nginx 复制代码
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
  1. OCSP 装订优化:
nginx 复制代码
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.crt;
  1. 安全增强配置:
nginx 复制代码
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
五、完整配置示例
nginx 复制代码
http {
    # 共享 SSL 配置
    ssl_session_cache shared:le_nginx_SSL:10m;
    
    server {
        listen 443 ssl;
        server_name example.com;

        # 证书路径
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        # 安全协议
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;

        # WebSocket 配置
        location /wss/ {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

        # 静态文件服务
        location / {
            root /var/www/html;
            index index.html;
        }
    }

    # HTTP 强制跳转
    server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name$request_uri;
    }
}
六、验证与测试
  1. 检查配置语法:
bash 复制代码
sudo nginx -t
  1. HTTPS 验证:
bash 复制代码
curl -I https://example.com
# 应返回 HTTP/2 200
  1. WSS 测试:
javascript 复制代码
// 浏览器端测试代码
const ws = new WebSocket("wss://example.com/wss");
ws.onopen = () => console.log("Connected");
七、常见问题排查
  1. 证书错误:
  • 确认证书路径正确
  • 检查文件权限(推荐 644)
  1. WebSocket 连接失败:
  • 验证 Upgrade 头是否正确传递
  • 检查后端服务是否正常运行
  1. 性能优化:
nginx 复制代码
# 调整缓冲区设置
proxy_buffers 8 32k;
proxy_buffer_size 64k;
  1. 防火墙设置:
bash 复制代码
sudo ufw allow 443/tcp

配置完成后建议使用 SSL Labs 测试:https://www.ssllabs.com/ssltest/

相关推荐
2501_915918418 分钟前
接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南
websocket·网络协议·tcp/ip·http·网络安全·https·udp
DuelCode13 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
dyj0951 天前
【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
运维·nginx·rancher
PanZonghui1 天前
Centos项目部署之Nginx部署项目
linux·nginx
Hellc0071 天前
Nginx 高级 CC 与 DDoS 防御策略指南
运维·nginx·ddos
小皮侠1 天前
nginx的使用
java·运维·服务器·前端·git·nginx·github
拾光拾趣录1 天前
无状态协议下的用户状态管理:Web应用如何保持用户登录态
前端·http·https
梁bk1 天前
[Nginx]反向代理和负载均衡
运维·nginx·负载均衡
游戏开发爱好者81 天前
iOS重构期调试实战:架构升级中的性能与数据保障策略
websocket·网络协议·tcp/ip·http·网络安全·https·udp
绝不偷吃2 天前
FastDFS分布式储存
linux·nginx