在子位置

时间:2016-07-09 18:28:13

标签: javascript node.js sockets nginx socket.io

我正在尝试在我家的树莓上运行express-socket.io-angular.js应用程序。

Express和socket.io正在端口3001上运行。在http://[IP]:3001访问应用程序正常。我想在http://[IP]/ttt访问该应用程序。

我像这样配置了nginx:

location /ttt/ {
    proxy_pass http://localhost:3001/;
}

在服务器上运行以下代码行:

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,如下所示:

<script src="socket.io/socket.io.js"></script>

并像这样连接:

socket: Socket = io.connect({path: "/ttt/socket.io"});

问题:

我获得了所有资源(html,css,js,包括socket.io.js),但是在浏览器日志中我收到错误消息,它无法获得http://[IP]/socket.io/?EIO=3&transport=polling&t=LNGvDUd经常更改的地方。

它报告状态404,很明显,因为nginx在/socket.io没有响应。

提前致谢!

与jfriend00合并结果:

工作设置如下所示:

nginx(找到有关正确配置的更多详细信息here):

location /ttt/ {
        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:3001/;
    }

快递:

var io = require('socket.io')(http);

客户(打字稿):

socket: Socket = io({path: "/ttt/socket.io"});

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的代理配置,它将在转发到端口3001之前从路径中剥离/ttt。因此,您的socket.io初始化在服务器上是不正确的。

改变这个:

var io = require('socket.io')(http, {path: '/ttt/socket.io'});

到此:

var io = require('socket.io')(http);

编辑:

并且,确保加载到浏览器中的客户端文件实际上是最新编辑的客户端文件。您可以在浏览器中使用“查看/来源”进行检查,以确切了解您正在运行的文件。