我从chrome控制台获取此错误日志
XMLHttpRequest无法加载https://subgroup.domain.com/socket.io/?EIO=3&transport=polling&t=Lpgp_mu。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:3000”访问。响应的HTTP状态代码为500。
我正在使用Node.js,socket.io在我的节点和react.js之间进行通信,并使用nginx托管数字联盟的droplet。
我一直在阅读很多关于CORS错误的内容,我不确定在哪里修复错误。我一直试图在我的NGINX中允许它们
getSender().tell(m, getSelf());
从我的node.js,服务器端:
location /server {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
我使用以下方式在客户端连接:
var express = require("express");
var app = express();
var http = require("http");
var port = 8080;
var io = require("socket.io").listen(app.listen(port));
app.use("/", function (req, res, next) {
res.status(200).send("Online |" + " Version : [" + AppVersion + "]");
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type");
res.setHeader("Access-Control-Allow-Methods","GET,POST, OPTIONS, PUT, PATCH, DELETE");
next();});
我不确定我应该在哪里寻找什么。任何形式的帮助都会有所帮助。谢谢!
答案 0 :(得分:2)
经过长时间的研究和多次测试,我得到了这个工作。这是我做的,
<强>的NodeJS 强>
upstream websocket1 {
server 127.0.0.1:3001;
}
server {
listen 80;
listen [::]:80;
root /var/www/html;
server_name mydomain.com
location /ws/ {
proxy_pass http://websocket1/socket.io/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
<强> Nginx的强>
const socket = io.connect('http://yourdomain.com/', {path: '/ws/'})
最后在客户端
/
以下是Chrome控制台的屏幕截图。
在Nginx中指定location
后,请不要忽略/ws/
,它必须是{{1}}否则无效。目前,我已使用Nginx将此节点平衡器添加到此套接字服务中。
干杯!