Node.js 如何通过ssl连接到socket io,通过apache2提供文件服务
我一直在尝试在NodeJS上设置SSL,通过使用CertBot证书的Apache2服务器提供Node.js 如何通过ssl连接到socket io,通过apache2提供文件服务,node.js,apache,socket.io,Node.js,Apache,Socket.io,我一直在尝试在NodeJS上设置SSL,通过使用CertBot证书的Apache2服务器提供index.html 不幸的是,当我试图让客户端通过https连接到服务器时,它抛出以下错误 [index.js:83 GET https://pxlloewe.de:3000/socket.io/?EIO=3&transport=polling&t=NJ9t2YZ net::ERR_SSL_PROTOCOL_ERROR][1] 那么,是否仍然可以通过appache2和ssl提供文件,
index.html
不幸的是,当我试图让客户端通过https连接到服务器时,它抛出以下错误
[index.js:83 GET https://pxlloewe.de:3000/socket.io/?EIO=3&transport=polling&t=NJ9t2YZ net::ERR_SSL_PROTOCOL_ERROR][1]
那么,是否仍然可以通过appache2和ssl提供文件,并通过加载的页面连接到服务器https:youDomain.com
我试图在NodeJS服务器上运行https,但我不想通过Express提供浏览器文件
这是我的密码,如果有人有机会从中读到一些东西:
服务器端:
var express = require("express");
var socket = require("socket.io");
var app = express();
const port = 3000
var server = app.listen(port, () => {
console.log("Express App auf Port: ", port)
});
//Socket Setup
var io = socket(server);
io.on("connection", function(){
console.log("Verbunden auf websocket")
})
客户端:
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js" integrity="sha512-v8ng/uGxkge3d1IJuEo6dJP8JViyvms0cly9pnbfRxT6/31c3dRWxIiwGnMSWwZjHKOuY3EVmijs7k1jz/9bLA==" crossorigin="anonymous"></script>
<title>Einfache Chat App</title>
<script src="chat.js"></script>
</html>
我在生产中直接从我的站点获取这个apache站点配置。然后对其进行修改以满足您的需要
服务器名pxlowe.de
#ServerAlias www.pxlowe.de
服务器管理员admin@pxlloewe.de
DocumentRoot/var/www/pxlowe\u de
日志级调试ssl:info
斯伦金安
SSLCertificateFile/etc/apache2/ssl/pxlowe.de.crt
SSLCertificateKeyFile/etc/apache2/ssl/pxlowe.de.key
重新启动发动机
RewriteCond%{REQUEST_URI}^/socket.io[NC]
RewriteCond%{QUERY_STRING}transport=websocket[NC]
RewriteCond%{HTTP:Upgrade}websocket[NC]
RewriteCond%{HTTP:Connection}升级[NC]
重写规则/(*)ws://127.0.0.1:3000/$1[P,L]
ProxyPass“/socket.io”http://127.0.0.1:3000/socket.io"
#ProxyPass /socket.io http://localhost/
#ProxyPassReverse /socket.io http://localhost/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/pxlloewe.de-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pxlloewe.de-0001/privkey.pem
ProxyPassReverse“/socket.io”http://127.0.0.1:3000/socket.io"
#ProxyPass /socket.io http://localhost/
#ProxyPassReverse /socket.io http://localhost/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/pxlloewe.de-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pxlloewe.de-0001/privkey.pem
ErrorLog${APACHE\u LOG\u DIR}/knct\u error\u https.LOG
CustomLog${APACHE\u LOG\u DIR}/knct\u access\u https.LOG组合
以下是让事情正常运行的步骤:
#ProxyPass /socket.io http://localhost/
#ProxyPassReverse /socket.io http://localhost/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/pxlloewe.de-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pxlloewe.de-0001/privkey.pem
ProxyPassReverse/socket.iohttp://localhost:3000/socket.io
#ProxyPass /socket.io http://localhost/
#ProxyPassReverse /socket.io http://localhost/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/pxlloewe.de-0001/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pxlloewe.de-0001/privkey.pem
谢谢你的帮助阿维夫罗!现在一切正常。您可以使用apache2设置反向代理。这需要通过express为文件提供服务,这不是我想要做的。不,它不要求您使用Expression为文件提供服务,但如何设置?在修复证书文件路径后,您是否使用apache2或Ngixa,现在它向我抛出了这样一个问题:
无效的命令'ProxyPass',可能拼写错误或由未包含在服务器配置中的模块定义
搜索解决方案,但我没有找到一个。抱歉,我忘了提及,但您必须启用mod_proxy和mod_proxy_wstunnel。看起来现在apache ist加载配置时没有任何问题,但是客户端仍然无法使用https连接到套接字。它仍然抛出ERR\u SSL\u PROTOCOL\u ERROR
创建了一个git来粘贴到我的代码中:Changevar socket=io.connect('pxlowe.de:3000',{secure:true})
tovar socket=io.connect('pxlowe.de,{secure:true})代码>