我在现场使用带有 apache 的 node.js 时遇到问题。
如果在没有 SSL 的情况下使用 http node.js 和 apache 正在 env 中使用我的域。文件
如果我删除 SSL 代码,它运行良好,但是有了它,我会收到一个到 http://mydomain.io/socket.io/1/?t=XXXXXXXXX
的请求
但是当我使用 let encrypt 启用 SSL
我的网站正在运行,但与 Node js + socket io 连接时出现错误 404
*请注意,它没有尝试使用 https,这会导致它失败。
我正在测试 chrome、firefox 和 edge 仍然无法修复。
如果这是一个简单的问题,我深表歉意,我是 node/socket.io 新手。
谢谢!
在这里,我的详细信息代码在使用 http | 时有效。但不能将 https 与 let encrypt 域一起使用
const pino = require('pino')
const https = require('https');
const { Boom } = require('@hapi/boom')
const fs = require('fs')
const chalk = require('chalk')
require('dotenv/config')
const express = require('express')
const socket = require("socket.io");
const { toDataURL } = require('qrcode')
const mysql = require('mysql');
require('dotenv').config();
const request = require('request');
const app = express()
const host = process.env.HOST ?? '127.0.0.1'
const port = parseInt(process.env.PORT ?? 3000)
app.use(express.urlencoded({ extended: true }))
app.use(express.json())
const ser = app.listen(port, host, () => {
console.log(`Server is listening on http://${host}:${port}`)
})
const io = socket(ser);
const db = mysql.createConnection({
host: process.env.DB_HOSTNAME,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
});
db.connect((err) => {
if (err) throw err;
console.log('Mysql Connected...');
});
const sessionMap = new Map()
最佳答案
我以前遇到过类似的问题,您需要 2 台不同的服务器,一台用于 http,一台用于 https。
var usinghttps = false;
if(usinghttps) {
var options = {
key: fs.readFileSync("/etc/letsencrypt/live/us2.swordbattle.io/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/us2.swordbattle.io/fullchain.pem"),
};
httpsserver = https.createServer(options, app).listen(443);
}
server = http.createServer(app);
然后创建 socket.io 服务器,const io = new Server(usinghttps ? httpsserver:server);
这对我个人有用,不确定它是否适用于所有应用程序。
关于node.js - 如何制作socket io | node.js - 使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72098389/