除了用Workerman自身的SSL,也可以利用nginx/apache作为wss代理转发给workerman
我就是栽在这大坑里(nginx/apache代理wss,workerman部分就不要设置ssl,否则将无法连接,两个方法2选1)官方推荐用nginx/apache代理wss
如果是微信小程序,要添加合法域名
格式:wss://域名
结尾不要加/,可以:端口
nginx配置参考
前提条件及准备工作:
已经安装nginx,版本不低于1.3
假设Workerman监听的是8282端口(websocket协议)
已经申请了证书(pem/crt文件及key文件)放在了/etc/nginx/conf.d/ssl下
打算利用nginx开启443端口对外提供wss代理服务(端口可以根据需要修改)
nginx一般作为网站服务器运行着其它服务,为了不影响原来的站点使用,这里使用地址 域名/wss
作为wss的代理入口。也就是客户端连接地址为 wss://域名/wss
nginx配置类似如下:
# websockets 友情提示可以放在伪静态那,安全点location /wss { proxy_pass http://127.0.0.1:9527; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr;}
测试链接地址
wss://域名/wss,/wss就是对应反向代理的location /wss
wss://域名/wss
利用apache代理wss
也可以利用apache作为wss代理转发给workerman(注意如使用apache代理SSL,则workerman部分千万不要设置ssl,否则将无法连接)。
准备工作:
GatewayWorker 监听 8282 端口(websocket协议)
已经申请了ssl证书, 放在了/server/httpd/cert/ 下
利用apache转发443端口至指定端口8282
httpd-ssl.conf 已加载
openssl 已安装
启用 proxy_wstunnel_module 模块
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
配置SSL及代理
#extra/httpd-ssl.confDocumentRoot "/网站/目录"ServerName 域名 # Proxy ConfigSSLProxyEngine on ProxyRequests OffProxyPass /wss ws://127.0.0.1:8282/wssProxyPassReverse /wss ws://127.0.0.1:8282/wss # 添加 SSL 协议支持协议,去掉不安全的协议SSLProtocol all -SSLv2 -SSLv3# 修改加密套件如下SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUMSSLHonorCipherOrder on# 证书公钥配置SSLCertificateFile /server/httpd/cert/your.pem# 证书私钥配置SSLCertificateKeyFile /server/httpd/cert/your.key# 证书链配置,SSLCertificateChainFile /server/httpd/cert/chain.pem
测试
wss://域名/wss
来源地址:https://blog.csdn.net/weixin_43453621/article/details/131471143