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;
}
}
我正在使用 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;
}
}