【发布时间】:2013-03-14 00:16:12
【问题描述】:
我有一个 nginx 服务器为 web 应用程序提供我所有的静态内容。 该应用程序使用在 node.js 中实现的 websockets unsing socket.io。 node.js 后端正在监听 8000 端口。
如果我通过端口 8000 将 socket-io.js 文件包含在静态交付的文档中,一切正常,但我已经阅读了一些关于使用 nginx 作为代理处理内部端口 8000 的内容
所以我#ve 构建了一个像这样的配置:
server {
server_name domain.com;
access_log /var/log/nginx/domaim.com.log;
location / {
root /home/app/static/;
}
location /socket/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
然后可以通过 domain.com/socket/ 访问 socket.io (收到消息 Welcome to socket.io)。 静态内容也被传递 但我找不到任何方法通过端口 80 加载“socket.io/socket.io.js”文件。
这可能以干净的方式吗?
【问题讨论】:
-
听起来你混淆了两件事:提供作为 socket.io 一部分的静态 JS 文件,而不是将 socket.io 连接传递回运行 socket.io 后端的 node.js。您应该像提供任何其他 JS 文件一样提供 socket.io 客户端文件。
-
@Code Painters 优先。进行了一些更改(将 js 嵌入我的静态文件夹中)。但奇怪的是当我连接 io.connect('domain.com/socket'); socket.io 似乎将 url 更改为 domain.com/socket.io 然后再次失败。所以我将位置更改为 socket.io,现在它可以工作了(但是为什么 socket.io 客户端使用不同的 url 来连接给定的呢?)
-
@CodePainters 请看看这个:stackoverflow.com/questions/23103241/…。我被困在这里了
标签: node.js sockets nginx socket.io