【发布时间】:2014-04-14 01:23:09
【问题描述】:
我正在尝试在同一服务器/端口上运行多个 NodeJS 应用程序,使用 nginx 作为反向代理来代理实际运行的 Node 应用程序。
server {
listen 8000;
server_name node.domain.com;
root /var/www/node;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# Enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location / {
proxy_pass http://127.0.0.1:8001;
}
location /irc/ {
proxy_pass http://127.0.0.1:8002;
}
location /voidwalker/ {
proxy_pass http://127.0.0.1:8003;
}
}
如您所见,我在 /var/www/node 的不同子目录中运行(使用 forever)不同的项目(NodeJS 应用程序)。
但我想在我的一个项目中使用socket.io。在 socket.io 文档中,它声明我应该使用 <script src="/socket.io/socket.io.js"></script> 在客户端加载 socket.io-client,它返回 404:
GET http://node.domain.com/socket.io/socket.io.js 404 (Not Found)
我猜这是因为我正在代理请求,但我并不完全了解该过程在内部是如何工作的,我很想让它工作。
对此需要注意的是,我必须使用 <link rel="stylesheet" href="/voidwalker/css/main.css"> 来加载我的 CSS,而我宁愿使用 <link rel="stylesheet" href="/css/main.css"> 以防我想将它部署在特定的子域/其他域上(因为这是一个开发服务器)。
编辑
因此,在与 Ray Stantz 一起进行了一些调试后,我们认为代理出现了问题。我将 socket.io.js 移至 /public/js/socket.io.js,现在可以使用它,但这不是正确的解决方案。
如果有人对此有任何想法,我会很高兴听到并尝试一下!
【问题讨论】:
-
127.0.0.1:8001 服务于 /socket.io/socket.io.js 吗? IE,不用代理能get吗?
-
我对 CentOS/Linux 很陌生。我的服务器正在运行 CentOS 6.5 (CLI),知道如何检查吗?
-
但是我正在尝试让 socket.io 处理 /voidwalker/ (:8003),因此 socket.io 应该安装在 /voidwalker/node_modules/... 下,对吗?跨度>
-
我认为我的问题不清楚。这就是我的意思:如果您的 html 页面包含 socket.io: 那么您的节点应用程序之一或 nginx 本身必须服务它。您想从哪里提供服务?
标签: node.js nginx reverse-proxy