我当前的项目是在 CentOS 7 WHM 专用机器上使用 CPanel 为网站提供服务。我使用 node.js socket.io 向站点发送实时更新,nodejs 文件也与站点文件位于同一目录中。要连接我的 socket.io-client,这是我放在 .htaccess 文件中的内容:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sitename\.com\:8080$ [OR]
RewriteCond %{HTTP_HOST} ^www\.sitename\.com\:8080$
RewriteRule ^(.*) "http\:\/\/127\.0\.0\.1\:8080\/$1" [P,L]
在我的 server.js 中,我只是监听 8080 端口
server.listen(8080);
在我的 socket.io 客户端
var socket = io.connect('http://sitename.com:8080',
{'force new connection':true,
'transports':['websocket']});
一切正常,但我最近将 SSL 应用到站点并尝试在我的 socket.io-client 中使用 SSL 连接,我尝试将 .htaccess 更改为此:
RewriteEngine on
RewriteCond %{HTTPS_HOST} ^sitename\.com\:8080$ [OR]
RewriteCond %{HTTPS_HOST} ^www\.sitename\.com\:8080$
RewriteRule ^(.*) "http\:\/\/127\.0\.0\.1\:8080\/$1" [P,L]
和 socket.io-client 到
var socket = io.connect('https://sitename.com:8080',
{'force new connection':true,
'transports':['websocket']});
但是我无法连接到我的 nodejs 服务器。我当前的设置错误吗?有人可以指导我正确的方向吗?
最佳答案
事实证明,根本不需要上面的 .htaccess 代码。只需在 WHM 防火墙中添加 socket.io 使用的端口就足以建立连接,不需要反向代理。要使 https 与我的 socket.io 一起工作,只需修改 server.js 以使用 https 并使用正确的 key 和已安装的证书文件:
var https = require('https');
var fs = require('fs');
var prvKey = fs.readFileSync('../../ssl/keys/123.key').toString();
var prvCert = fs.readFileSync('../../ssl/cert/123.crt').toString();
var server = https.createServer({key:prvKey,cert:prvCert});
server.listen(8080);
关于node.js - 如何在 WHM CentOS7 中为与虚拟主机一起安装的 Socket.IO 设置 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397132/