gpt4 book ai didi

javascript - 如何将 Socket.io 配置为在 https 上的同一端口上运行?

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:11 24 4
gpt4 key购买 nike

一如既往,我费尽心思寻找问题的答案,所以我再次向所有天才伸出援手! :)

我已经使用 socket.io(使用 express)设置了一个 Node.js 服务器,它使用端口 8443 运行良好。它运行良好:)。由于我的许多客户似乎不允许端口 8443 上的流量,因此他们无法使用我的服务。

我想知道如何在端口 443 上设置 Node.js,因为使用 Node-server 的站点已经在使用这个端口 (Https)。如果我尝试在我的 Node 服务器上使用端口 443,我会得到:warn - error raised: Error: listen EACCES

我的部分 Node-js 代码:

var fs = require('fs');
var https = require('https');
var express = require('express');
var socket = require('socket.io');
var port = 8443;

var sslOptions = {
pfx: fs.readFileSync('mykey.pfx'),
passphrase: ********
};

var app = express();

app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, *');
next();
});

var server = https.createServer(sslOptions, app);

var io = socket.listen(server, {
"log level" : 1,
"match origin protocol" : true,
"transports" : ['websocket', 'flashsocket'
, 'xhr-polling'
, 'jsonp-polling']
});

//No need to list all my socket events I guess

server.listen(port);

连接到我的 Node 服务器的客户端代码:

var socket = io.connect("https://www.*MYWEBSITE*.com", { secure: true, port: 8443});

最佳答案

我认为您在这里问了几个不同的问题。我会自己回答第一个问题,它应该可以解决您最初的问题,但其他一些人提出了一些也值得了解的方便的部署选项。

首先,您不需要在它自己的端口上运行 socket.io 服务器。您可以让 socket.io 服务器将自己绑定(bind)到 express 应用程序。例如:

// ... require stuff
var app = express();

// ... set up your express middleware, etc

var server = https.createServer(sslOptions, app);
// attach your socket.io server to the express server
var io = require("socket.io").listen(server);
server.listen(port);

无论您如何设置 Node 应用程序,了解如何将 nginx 设置为反向代理都是值得的。这很好,因为在运行 Node 应用程序时,您不必是 root 用户就可以使用 < 1024 端口,并且您可以通过虚拟主机将许多应用程序绑定(bind)到同一个 IP 地址。

这是一个 nginx 服务器配置 block ,它将反向代理 Node 应用程序(并支持 websockets)。

server {
listen 80;
server_name app.com www.app.com # a list of hosts for this application
access_log /var/log/nginx/access/app.log; # you'll need to create /var/log/nginx/access
error_log /var/log/nginx/error/app.log; # and you'll need to create /var/log/nginx/error

# prevents 502 bad gateway error
large_client_header_buffers 8 32k;

location / {

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;

proxy_buffers 8 32k;
proxy_buffer_size 64k;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://127.0.0.1:8000; # put the port of your node app here
proxy_redirect off;
}
}

关于javascript - 如何将 Socket.io 配置为在 https 上的同一端口上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com