Workerman怎么配置SSL证书?实现WSS协议完整步骤

云雪君_9498

云雪君_9498

2026-05-26

1004人浏览

原创

必须用nginx反向代理实现wss,因workerman无http解析能力,无法处理tls握手与websocket升级请求;nginx需透传upgrade/connection头、启用http/1.1、配置完整证书链并设置长超时。

workerman怎么配置ssl证书?实现wss协议完整步骤

Workerman 本身不直接处理 WSS 握手,必须用 Nginx 反向代理做 TLS 终结——这是最稳定、微信小程序唯一认的方案。 直接在 Workerman 启用 ssl transport 虽然语法上可行,但极易因证书链、SNI、HTTP Upgrade 头缺失导致握手失败,尤其在微信环境里几乎必挂。

为什么不能让 Workerman 自己监听 wss://443?

Workerman 的 ssl transport 仅负责底层 TLS 加密通道,它不解析 HTTPS 请求头,也不响应 Upgrade: websocket 协议升级。而微信小程序发起 wss 连接时,首包是标准 HTTPS GET 请求,带 Upgrade 和 Connection: upgrade 头。Workerman 没有 HTTP Server 能力,会直接丢弃或返回 400/500,连接立刻断开。

常见现象:fail net::ERR_CONNECTION_REFUSED 或控制台卡在 connecting 状态几秒后超时。

  • Workerman 原生 Worker('websocket://...') 不支持处理 TLS 握手 + HTTP 升级两个阶段
  • 即使加了 'transport' => 'ssl',也只适用于客户端直连(如浏览器 JS new WebSocket("wss://...:8282")),且要求域名、证书、端口全部严格匹配
  • 微信强制校验证书有效性(不能自签、不能局域网 IP)、SNI、完整证书链,Workerman 无法透传或补全这些

Nginx 反代配置:最小可用 wss 入口

Workerman 只监听本地明文 ws 地址,Nginx 负责 TLS 终结、协议识别与转发。这是生产环境唯一推荐方式。

关键点不是“配对”,而是“不干扰”:

  • Nginx 必须透传 Upgrade 和 Connection 头,否则 Workerman 收不到升级请求
  • proxy_http_version 1.1 是硬性要求,HTTP/1.0 不支持 Upgrade
  • proxy_read_timeout 要设大(如 86400),避免空闲连接被 Nginx 断开
  • 证书路径必须是 PEM 格式完整链(fullchain.pem,含中间证书),单独 .crt 文件大概率握手失败

示例配置(保存为 /usr/local/nginx/conf/vhost/your-domain.conf):

SSL Certificate Monitor
SSL Certificate Monitor

检查一个或多个域名的 SSL/TLS 证书到期时间、颁发者、协议及 SAN 信息,用于应要求检查证书、监控到期或验证 HTTPS 等场景。

下载
server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:2346;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 86400;
    }
}

配置完务必执行:nginx -t && nginx -s reload

Workerman 端只需跑纯 ws 服务

Workerman 完全不用碰证书文件,也不用改 transport。它只暴露一个本地明文 WebSocket 服务,由 Nginx 代理出去变成 wss。

启动代码(start.php)示例:

<?php require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;

$worker = new Worker('websocket://127.0.0.1:2346');
$worker->onMessage = function($connection, $data) {
    $connection->send('pong');
};
Worker::runAll();
  • 监听地址必须是 127.0.0.1,禁止绑定 0.0.0.0 暴露到公网
  • 端口随意(如 2346、8282),只要和 Nginx proxy_pass 一致即可
  • 不要在 $worker 上设置任何 SSL 相关上下文,否则反而干扰

验证和排错重点

证书和 Nginx 配置看似生效,但微信仍连不上?90% 出在以下三处:

  • 用 openssl s_client -connect your-domain.com:443 -servername your-domain.com 检查证书链是否完整(输出里要有 Verify return code: 0 (ok))
  • 用浏览器访问 wss://your-domain.com(注意不是 ws://),F12 Console 执行 new WebSocket("wss://your-domain.com"),看是否触发 onopen
  • 检查 Nginx error log(/usr/local/nginx/logs/error.log),搜索 upstream prematurely closed 或 no live upstreams,确认后端 Workerman 进程确实在运行且可连
  • 微信开发者工具里「调试基础库」要 ≥ 2.10.0,旧版本不支持部分 TLS 1.3 特性

真正麻烦的从来不是写几行 PHP,而是让证书、Nginx、域名、防火墙、小程序 SDK 全部对齐同一套 TLS 行为——漏掉任意一环,连接就静默失败。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

ssl workerman

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
SSL检测工具介绍
SSL检测工具介绍

SSL检测工具有SSL Labs、SSL Check、SSL Server Test、SSLMate、SSL/TLS Analyzer等。详细介绍:1、SSL Labs是一个由Qualys提供的在线SSL检测工具,可以评估服务器证书的部署情况、加密套件、协议支持等方面的安全性,它提供了一个详细的报告,包括证书的颁发者、有效期、安全性配置等;2、SSL Check等等。

2023.10.20

770

3

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

2026.05.20

186

15

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

2026.05.20

202

12

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

2026.05.20

207

13

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

60

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

40

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

40

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

20

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 0.1万人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习