gpt4 book ai didi

node.js - 使用 socket.io/nginx/node 时出现 CORS 错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:11:11 27 4
gpt4 key购买 nike

我从 chrome 的控制台得到这个错误日志

XMLHttpRequest cannot load https://subgroup.domain.com/socket.io/?EIO=3&transport=polling&t=Lpgp_mu. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 500.

我正在使用 Node.js、socket.io 在我的 Node 和 react.js 之间进行通信,并使用 digitalocean 的 droplet 使用 nginx 来托管它们。

我已经阅读了很多关于 CORS 错误的资料,但我不确定在哪里可以修复错误。我一直在尝试让它们出现在我的 NGINX 中

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;
}

从我的 node.js,服务器端:

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();});

我在客户端连接使用:

const socket = io.connect("https://subgroup.domain.com/server")

我不太确定应该在哪里寻找什么。任何形式的帮助都会有所帮助。谢谢!

最佳答案

经过长时间的研究和执行多次测试后,我成功了。这是我做的,

NodeJS

const server = require('http').createServer();
const io = require('socket.io')(server);

io.on('connection', (socket) => {
console.log('A user connected!');
io.emit('welcome', 'Hello there!');
});

server.listen(3001);
console.log('Socket server started on port 3001');

Nginx

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";
}
}

终于到了客户端

const socket = io.connect('http://yourdomain.com/', {path: '/ws/'})

这是 Chrome 控制台的屏幕截图。

enter image description here

在Nginx中指定location后请不要忽略/,它必须是/ws/否则不能正常工作。目前,我使用 Nginx 将 Node 平衡器添加到此套接字服务。

干杯!

关于node.js - 使用 socket.io/nginx/node 时出现 CORS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787597/

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