Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何通过ssl连接到socket io,通过apache2提供文件服务_Node.js_Apache_Socket.io - Fatal编程技术网

Node.js 如何通过ssl连接到socket io,通过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提供文件,

我一直在尝试在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提供文件,并通过加载的页面连接到服务器
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组合
以下是让事情正常运行的步骤:

  • 将子域添加到我的主域(websocket.pxlloewe.de)

  • 路由到我的dyndns(让我的服务器在raspberryPi上在家运行)

  • 通过Certbot和代理设置apache2/LetsEncrypt。MyConfig:

    ServerName websocket.pxlowe.de 服务器管理员Ich@bin.Gut DocumentRoot/var/www/html/pxlowe\u de 代理主机 代理请求关闭 ProxyPass/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
    
    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来粘贴到我的代码中:Change
    var socket=io.connect('pxlowe.de:3000',{secure:true})
    to
    var socket=io.connect('pxlowe.de,{secure:true})