最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用socket.ionginx 节点时出现CORS错误

IT培训 admin 5浏览 0评论

使用socket.io / nginx /节点时出现CORS错误

我从chrome的控制台获取此错误日志

XMLHttpRequest无法加载.io/?EIO=3&transport=polling&t=Lpgp_mu。所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:3000”。响应的HTTP状态码为500。

[我正在使用Node.js,socket.io在我的节点和react.js之间进行对话,并使用nginx托管它们的digitalocean小滴。

我已经阅读了很多有关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("")

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

回答如下:

经过长时间的研究并执行了多次测试,我终于完成了这项工作。这是我所做的,

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

    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/', {path: '/ws/'})

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

在Nginx中指定/后,请不要忽略location,它必须为/ws/,否则将不起作用。当前,我已经使用Nginx将节点平衡器添加到此套接字服务中。

干杯!

使用socket.io / nginx /节点时出现CORS错误

我从chrome的控制台获取此错误日志

XMLHttpRequest无法加载.io/?EIO=3&transport=polling&t=Lpgp_mu。所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:3000”。响应的HTTP状态码为500。

[我正在使用Node.js,socket.io在我的节点和react.js之间进行对话,并使用nginx托管它们的digitalocean小滴。

我已经阅读了很多有关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("")

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

回答如下:

经过长时间的研究并执行了多次测试,我终于完成了这项工作。这是我所做的,

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

    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/', {path: '/ws/'})

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

在Nginx中指定/后,请不要忽略location,它必须为/ws/,否则将不起作用。当前,我已经使用Nginx将节点平衡器添加到此套接字服务中。

干杯!

发布评论

评论列表 (0)

  1. 暂无评论