Nodejs (sailsjs)、NGINX 和 sails.io (socket.io)

Nodejs (sailsjs), NGINX and sails.io (socket.io)

我正在使用 NGINX 来处理我的 Nodejs 服务器,现在我想开始在它们上使用 socket.io,在开始使用 socket.io 之前进行研究,我发现了 Sailsjs,我从小就发现了它的,现在正在使用。

我遇到的问题是,客户端无法通过 socket.io 或 sails.io.

上的 NGINX 进行连接

这是我当前APP的URL路径: https://localhost/economy

sails.io 的 url 作为标准是: https://localhost/economy/assets/js/dependencies/sails.io.js

现在! 使用 FileSeek 我发现 sails.js 使用 "require("socket.io")" 的地方,它位于 "loadSocketIO.js" (node_modules\sails\lib\hooks\sockets\lib) 中。我编辑文件说:

var io = sails.io = sails.ws =
    SocketServer.listen(sails.hooks.http.server, {
  resource: 'economy',
        logger: {
            info: function (){}
        }
    });

添加 资源:'economy', 行。 然后在客户端我做了同样的事情:

var socket = io.connect('https://localhost/economy/socket.io', { resource: 'economy' });

我一直在玩这个并尝试了不同的方法,比如 "economy/socket.io"、完整的 socket.io 路径等

任何帮助,都是很大的帮助!

我已经苦苦挣扎了一天,所以我想我应该寻求一些帮助:)

解决方案!

运行 一切如常,您唯一需要编辑的部分是在 NGINX 中。

设置一个服务器块,服务器名称为economy.localhost/,你就完成了:) 请记住 link economy.localhost 到 127.0.0.1 或如果这是生产服务器则设置一个 cname :)

您不需要更改 Sails 方面的任何内容。尝试在 proxy_pass 上阅读 Nginx 中的位置指令。

http://nginx.org/en/docs/http/websocket.html

以上内容节选link:

location /chat/ {

    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://localhost:1337;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

示例显示 here 对我有效。

基本上 nginx WebSocket 支持 你需要包含以下配置。

server {
    server_name app.domain.com;
    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://localhost:8080;
    }
}