【问题标题】:Socket.io client-side javascript file location (with nginx reverse proxy)Socket.io 客户端 javascript 文件位置(使用 nginx 反向代理)
【发布时间】: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


【解决方案1】:

有同样的问题。通过在 nginx 配置中将 /socket.io 路由到我的 node.js 应用程序来解决。在您的情况下,它应该如下所示:

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;
    }

    location /socket.io {
        proxy_pass http://127.0.0.1:8003;
    }
}

此解决方案的唯一缺点是只有 voidwalker 应用程序可以使用 socket.io(因为 /socket.io 仅在 127.0.0.1:8003 上提供)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2021-07-01
    相关资源
    最近更新 更多