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

 更新时间:2025年05月14日 12:29:12   作者:Ziegler Han  
本教程将手把手教你如何为网站配置 HTTPS 加密访问,并通过反向代理实现安全的 WebSocket(WSS)通信,感兴趣的朋友跟随小编一起看看吧

Nginx 配置 HTTPS 与 WSS 完整指南

本教程将手把手教你如何为网站配置 HTTPS 加密访问,并通过反向代理实现安全的 WebSocket(WSS)通信。以 https://www.zhegepai.cn 域名为例,完整流程约需 30 分钟完成。

一、前置准备

1.1 域名注册(示例)

• 已注册域名:www.zhegepai.cn
• 确认域名已解析到服务器 IP
• 推荐 DNS 检查工具:dig www.zhegepai.cnDNS 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • centos8中使用yum安装nginx的详细过程

    centos8中使用yum安装nginx的详细过程

    这篇文章主要介绍了centos8中怎样使用yum安装 nginx,centos8和centos7安装nginx有点点不一样,centos8 自带了nginx 1.14.1 ,我们先升级到新稳定版1.20.1,具体安装方法跟随小编一起学习下吧
    2023-03-03
  • 基于nginx access日志格式详解

    基于nginx access日志格式详解

    下面小编就为大家分享一篇基于nginx access日志格式详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Nginx配置https脚本实例

    Nginx配置https脚本实例

    这篇文章主要为大家介绍了Nginx配置https脚本实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Nginx 设置域名转发到指定端口的实现方法

    Nginx 设置域名转发到指定端口的实现方法

    这篇文章主要介绍了Nginx 设置域名转发到指定端口的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • nginx如何实现同个ip、端口访问不同的项目(以路径区分项目)

    nginx如何实现同个ip、端口访问不同的项目(以路径区分项目)

    这篇文章主要介绍了nginx如何实现同个ip、端口访问不同的项目(以路径区分项目),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • nginx日志格式分析以及修改详解

    nginx日志格式分析以及修改详解

    Nginx日志对于统计、系统服务排错很有用,下面这篇文章主要给大家介绍了关于nginx日志格式分析以及修改的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Nginx 路由转发和反向代理location配置实现

    Nginx 路由转发和反向代理location配置实现

    本文主要介绍了Nginx 路由转发和反向代理location配置实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 如何使用k8s部署nginx服务

    如何使用k8s部署nginx服务

    Deployment是用来定义和管理 Pod 的高级控制器,它描述了应用程序的期望状态,例如需要运行的 Pod 数量、使用的镜像版本等信息,本文给大家介绍如何使用k8s部署nginx服务,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Nginx在高并发架构中配置静态文件地址的实战指南

    Nginx在高并发架构中配置静态文件地址的实战指南

    在高并发架构中,Nginx不仅仅是一个Web服务器,更是整个系统的流量守门人和性能加速器,为什么你的网站明明用了Nginx,却依然感觉慢?为什么一上并发就出现502/504错误,今天,我们就深入剖析如何通过精准配置Nginx静态文件参数,需要的朋友可以参考下
    2026-01-01
  • Nginx 502 Bad Gateway错误的原因分析及解决方案

    Nginx 502 Bad Gateway错误的原因分析及解决方案

    这篇文章主要介绍了Nginx 502 Bad Gateway错误的原因分析及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05

最新评论