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/

相关推荐
伊成9 小时前
Docker 部署 Nginx 完整指南
nginx·docker·容器
小白的代码日记17 小时前
Nginx学习与安装
运维·nginx
ayaya_mana21 小时前
Nginx性能优化与安全配置:打造高性能Web服务器
运维·nginx·安全·性能优化
油丶酸萝卜别吃1 天前
nginx配置代理服务器
运维·网络·nginx
花酒锄作田1 天前
Nginx反向代理Kafka集群
nginx·kafka
奥格列的魔法拖鞋~1 天前
Docker-LNMP架构 创建多项目- 单个ngixn代理多个PHP容器服务
nginx·docker·eureka·架构·php·lnmp
皓空揽月1 天前
php+apache+nginx 更换域名
nginx·php·apache
会说法语的猪1 天前
使用nginx反向代理kkfile
运维·nginx
Mr_Xuhhh2 天前
传输层协议TCP(3)
运维·服务器·网络·网络协议·tcp/ip·http·https
夜影风2 天前
Nginx反向代理与缓存实现
运维·nginx·缓存