从我的 React 应用程序中获取相当多的此类内容: GET http://exampleenvv2-env.eba-yjtafbmz.us-east-1.elasticbeanstalk.com/socket.io/?EIO=3&transport=轮询&t=NLE1Pn5
我的 React 位于端口 8080,Express 位于端口 5000,两者都位于 AWS Beanstalk 上的 Nginx 后面。从 SSH 进入实例,看起来两者都运行良好,并且由于我可以在浏览器中正常访问 React 应用程序,因此看起来它正确路由到该服务器。
我能够在两个浏览器窗口之间本地运行一个基本的聊天应用程序。
我在我的 React page.js 中执行此操作:
import socketIOClient from "socket.io-client";
var io = require('socket.io');
var socket = socketIOClient();
Server.js(用于 Express/Socket.io 监听):
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const router = express.Router();
var Immutable = require('immutable');
var SortedSet = require("collections/sorted-set");
var Map = Immutable.Map;
var List = Immutable.List;
var hostname = process.env.IP || 'localhost';
var port = 5000;
var games = Map();
var players = Map();
var availableKeys = SortedSet();
var maxKey = 0;
/.../
http.listen(port, hostname, function () {
console.log("Server is listening on http://" + hostname + ":" + port);
});
Nginx 位置配置部分:
location / {
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /socket.io {
proxy_pass http://127.0.0.1:5000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_session_reuse off;
proxy_cache_bypass $http_upgrade;
}
我尝试使用“/socket.io”的路径选项进行 Node 和 react ,但这似乎没有帮助。
这是error.log
的示例:
2020/10/22 01:36:44 [error] 20352#0: *279 connect() failed (111: Connection refused) while connecting
to upstream, client: 172.31.22.103, server: , request: "GET /socket.io/
EIO=3&transport=polling&t=NLDyuCl HTTP/1.1", upstream: "http://127.0.0.1:5000//?
EIO=3&transport=polling&t=NLDyuCl", host: "exampleenvv2-env.eba-yjtafbmz.us-east-
1.elasticbeanstalk.com", referrer: "http://exampleenvv2-env.eba-yjtafbmz.us-east-
1.elasticbeanstalk.com/"
最佳答案
事实证明the top-ranked answer here Nginx 配置就是我所需要的。
我最终编辑了路径,但还添加了一些其他行,但我真的认为该路径很挑剔。 Nginx 擅长从具体到一般,但是否需要完全匹配或最相关取决于用户。
location ~* \.io {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy false;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_session_reuse off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_http_version 1.1;
}
感谢您的其他答案,这些答案是解决此设置问题的其他好步骤!
关于node.js - 为什么 Socket.io 轮询请求不断收到 404 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64474260/