Javascript 在nginx后面的子位置运行socket.io
我正试图在我家的树莓上运行一个express-socket.io-angular.js应用程序 Express和socket.io正在端口3001上运行。访问应用程序时一切正常。我想访问位于的应用程序 我将nginx配置为:Javascript 在nginx后面的子位置运行socket.io,javascript,node.js,sockets,nginx,socket.io,Javascript,Node.js,Sockets,Nginx,Socket.io,我正试图在我家的树莓上运行一个express-socket.io-angular.js应用程序 Express和socket.io正在端口3001上运行。访问应用程序时一切正常。我想访问位于的应用程序 我将nginx配置为: location /ttt/ { proxy_pass http://localhost:3001/; } <script src="socket.io/socket.io.js"></script> socket: Socket = i
location /ttt/ {
proxy_pass http://localhost:3001/;
}
<script src="socket.io/socket.io.js"></script>
socket: Socket = io.connect({path: "/ttt/socket.io"});
在服务器上,我运行以下代码行:
var express = require('express');
var app = express();
var http = require('http').Server(app);
...
app.use(express.static(__dirname + '/public'));
app.use('/node_modules', express.static(__dirname + '/node_modules'));
...
var io = require('socket.io')(http, {path: '/ttt/socket.io'});
...
http.listen(3001, function () {
console.log('Listening on port 3001');
});
在客户端,我包括socket.io,如下所示:
location /ttt/ {
proxy_pass http://localhost:3001/;
}
<script src="socket.io/socket.io.js"></script>
socket: Socket = io.connect({path: "/ttt/socket.io"});
问题是:
我得到了所有的资源(html、css、js,包括socket.io.js),但是在browserlog中我得到了错误消息,它无法得到t经常变化的地方
很明显,它会报告状态404,因为nginx不会在/socket.io处响应
提前谢谢
与jfriend00的组合结果: 工作设置如下所示:
location /ttt/ {
proxy_pass http://localhost:3001/;
}
<script src="socket.io/socket.io.js"></script>
socket: Socket = io.connect({path: "/ttt/socket.io"});
nginx(找到有关正确配置的更多详细信息):
快递:
var io = require('socket.io')(http);
客户端(类型脚本):
如果我正确理解您的代理配置,它将在转发到端口3001之前从路径中剥离
/ttt
。因此,服务器上的socket.io初始化不正确
更改此项:
var io = require('socket.io')(http, {path: '/ttt/socket.io'});
为此:
var io = require('socket.io')(http);
编辑:
并且,确保加载到浏览器中的客户端文件实际上是最新编辑的客户端文件。您可以使用浏览器中的View/Source查看它,以查看您正在运行的文件。如果我正确理解您的代理配置,它将在转发到端口3001之前从路径中删除
/ttt
。因此,服务器上的socket.io初始化不正确
更改此项:
var io = require('socket.io')(http, {path: '/ttt/socket.io'});
为此:
var io = require('socket.io')(http);
编辑:
并且,确保加载到浏览器中的客户端文件实际上是最新编辑的客户端文件。您可以使用浏览器中的View/Source进行检查,以查看您正在运行的文件。感谢您的快速响应!是的,您正确理解了我的代理设置。我试过了,但浏览器仍然试图获取/socket.io/。。。在错误的URL上,我不知道客户端代码中的这个语法是什么意思:
socket:socket=io.connect({path://ttt/socket.io})代码>。它在客户端中对我起作用:socket=io({path://ttt/socket.io})
和
。抱歉,但我仍然在http://[IP]/socket.io/?EIO=3&transport=polling&t=lngvdudud上收到404错误。您指的是语法的哪一部分?@Stefan-有些东西与您在客户端中显示的不一样,因为路径选项到io()
或io.connect()
将更改客户端在那里请求的URL。我自己也试过。它起作用了。您正在运行哪个版本的socket.io?是否确实没有其他位置的socket.io连接,或者确实正在编辑正确的客户端源文件,并且缓存了旧的客户端源文件?l您可以在浏览器中执行查看/源操作,以查看它正在运行的页面。我发现了错误,我的IDE配置为在保存时自动上载文件。在我编译了ts文件之后,它没有更新服务器上的js文件。。。。非常感谢您的帮助,并告诉我检查从服务器获得的文件:)感谢您的快速响应!是的,您正确理解了我的代理设置。我试过了,但浏览器仍然试图获取/socket.io/。。。在错误的URL上,我不知道客户端代码中的这个语法是什么意思:socket:socket=io.connect({path://ttt/socket.io})代码>。它在客户端中对我起作用:socket=io({path://ttt/socket.io})
和
。抱歉,但我仍然在http://[IP]/socket.io/?EIO=3&transport=polling&t=lngvdudud上收到404错误。您指的是语法的哪一部分?@Stefan-有些东西与您在客户端中显示的不一样,因为路径选项到io()
或io.connect()
将更改客户端在那里请求的URL。我自己也试过。它起作用了。您正在运行哪个版本的socket.io?是否确实没有其他位置的socket.io连接,或者确实正在编辑正确的客户端源文件,并且缓存了旧的客户端源文件?l您可以在浏览器中执行查看/源操作,以查看它正在运行的页面。我发现了错误,我的IDE配置为在保存时自动上载文件。在我编译了ts文件之后,它没有更新服务器上的js文件。。。。非常感谢您的帮助,并告诉我检查从服务器获取的文件:)