【发布时间】:2018-12-01 20:43:26
【问题描述】:
我在生产系统上收到 404 错误(客户端)。如果我在本地网络中运行服务器,一切都很好。
加载资源失败:服务器响应状态为 404(未找到)
GET https://foo.com/socket.io/?EIO=3&transport=polling&t=MGd8e2F 404(未找到)
我使用的是 socket.io 版本 2.1.1 和 Express 4。
服务器.js
...
var http = require('http');
var https = require('https');
var app = express();
httpServer = http.createServer(app);
httpsServer = https.createServer(options, app);
...
const io = require('socket.io')(httpsServer);
httpServer.listen(process.env.SERVER_HTTP_PORT);
httpsServer.listen(process.env.SERVER_HTTPS_PORT);
io.use(function (socket, next) {
//Middleware (express-session)
e_session(socket.request, socket.request.res, next);
});
io.on('connection', function (client) {
...
}
client.js
const socket = io('https://' + window.location.hostname + ':443');
socket.on('connect', function (data) {
socket.emit('join', 'Server Connected to Client');
});
...
我也在 client.js 中尝试过:
const socket = io();
const socket = io('https://' + window.location.hostname);
为什么客户端无法连接到生产系统上的服务器?
【问题讨论】:
-
也许(很可能)您已经在 prod 服务器的端口 443 上运行了一些东西。以 Apache 或 Nginx 服务器为例
-
@Seblor 它在一个空的 docker alpine 容器中运行。如果某些东西在端口 80 或 443 上运行,则服务器无法启动和/或我无法加载页面。还是我错了?
-
AFAIK,如果端口已被占用,socker.io 服务器不会崩溃。在 Docker 容器上运行不会改变任何东西(网络方面)。如果使用 IP 上的端口,您只能访问在该端口上运行的服务器(除非所述服务器具有虚拟主机设置/代理设置)。编辑:我建议您在您的 IP 或主机名上运行 nmap 以查看占用的端口。但是,只有 Web 服务器会返回 404 错误,因为“404 - 未找到”是 HTTP 错误代码。