如何在浏览器中访问远程 node.js 应用程序,而不是在本地主机上

Posted

技术标签:

【中文标题】如何在浏览器中访问远程 node.js 应用程序,而不是在本地主机上【英文标题】:How to access remote node.js app in browser, not on localhost 【发布时间】:2016-06-09 00:14:29 【问题描述】:

我正在尝试设置一个简单的“Hello world”node.js 应用程序。

我创建了以下 index.js 文件:

var app = require("express")();
var http = require("http").Server(app);

app.get("/", function(req, res)
    res.send("<h1>Hello worlddddd</h1>");
);

http.listen(8080, function()
    console.log("listening on *:8080");
);

当我打开本地控制台并执行 node index.js 时,我收到消息“正在侦听 *:8080”,正如预期的那样。我将浏览器指向 localhost:8080,然后我看到 html 页面按需要显示“Hello worlddd”。

现在,我正尝试在我的虚拟专用服务器上做同样的事情,这样我就可以从不同的计算机访问同一个应用程序,但我得到的只是连接超时。我已按照以下步骤操作:

在我的 VPS 上安装 node.js 通过npm install --save express@4.10.2安装express 将我的 index.js 文件上传到我的服务器上的 var/www/html 文件夹,IP 为 192.123.123.12(例如,这不是我的真实 IP)。 通过 PuTTY 访问服务器,然后运行 ​​node index.js,我得到 "listening on *:8080",所以我知道 node.js 正在工作。 现在我将浏览器指向 http://192.123.123.12:8080,大约 20 秒后,我收到浏览器错误:“连接已超时”。 我已尝试改为监听端口 :80,但我收到此端口已在使用中的错误消息。

有人知道我做错了什么吗?我使用了错误的端口吗?我指向错误的 URL 吗?我需要修改我的服务器首选项吗? (在 CentOS 上运行 Apache)。我只找到了几十个教程,教你如何在本地计算机上运行 node.js 应用程序(将浏览器指向 localhost:8080),但我需要它在我的远程服务器上运行,以便多台计算机可以访问相同应用程序。

【问题讨论】:

您需要找到在您的 VPS 上运行 node.js 服务器应用程序以及如何配置传入端口以及是否支持长时间运行的服务器(如 nodejs)的特定文档。这不是通用说明,但可能涉及您自己的托管服务的特定配置。 哦,谢谢!那么,它不应该直接开箱即用吗?也许我的托管服务提供商的客户服务中心可以提供帮助。 可能有一些(默认)过滤会阻止连接到预定义端口的其他端口。或者如果您与其他主机共享 IP,它可能会更加复杂。 检查过滤器(如果是某种基于 Linux 的服务器,可能是 iptables)。如果您有任何类型的控制面板,它可能可以在其中的某个地方进行配置。 @jcaron 天哪,我明白了!非常感谢! iptables 绝对让我朝着正确的方向前进,因为它是一个 Apache CentOS 服务器。我最终使用了以下命令:sudo iptables -I INPUT 1 -i + -p tcp --dport 8080 -j ACCEPT。使用通配符+ 是否会使我容易受到任何安全问题的影响?尽管阅读了 Ubuntu Iptables Howto 页面,但我仍然不完全理解该接口参数的作用。 【参考方案1】:

问题在于,除非您明确允许,否则您当前的过滤器 (iptables) 会阻止流量。

你只需要打开端口 TCP 8080 入站,你应该可以访问你的 node.js 服务器!

【讨论】:

对于任何想要尝试看看这是否是问题的人,只需尝试 telnet 到该端口上的服务器,例如telnet myserver.com 8080。如果您收到一条消息说您已连接,则端口已打开。

以上是关于如何在浏览器中访问远程 node.js 应用程序,而不是在本地主机上的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Node.js 访问、检索、存储和删除文件到远程文件服务器?

如何在 heroku 上远程调试 node.js 应用程序?

如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?

使Node.js中的http.request适用于浏览器

no-vnc和node.js实现web远程桌面的完整步骤

使用 Express 限制对 Node.js 的访问