【问题标题】:Can't access Node.js server on web server无法访问 Web 服务器上的 Node.js 服务器
【发布时间】:2018-12-10 04:40:46
【问题描述】:

我正在尝试在我的网络服务器上测试一个简单的 Node.js 服务器。问题是我无法从我的 chrome 浏览器访问 Node.js 服务器,并且我已经搜索但没有任何成功。

这是我的基本 server.js 脚本(服务器端)

var app = require('express')();

app.get('/test', function (req, res) {
    console.log('web page opened');
});

app.listen(3000, function () {
    console.log('Listening on port 3000');
});

当我在控制台中运行节点时,我得到了预期的结果

public_html$ node server.js
Listening on port 3000   

现在当我尝试访问这样的 URL 时:

http://xxx.xxx.xxx.xxx:3000/test 连接超时,我什么也得不到。

这阻止了我使用 $.ajax 表单向我的节点服务器发送数据,并且 jquery 请求失败并出现错误,因为连接超时问题以及我的 nodejs 端口的 URL:3000 不可​​访问。

我的主机 (Cloudways) 似乎不允许访问任何端口。如果是这样,在这种情况下我该怎么办?

注意:我没有对服务器的 root 访问权限,他们无法授予 root 访问权限以确保安全。

【问题讨论】:

  • 听起来你需要一个新主机
  • 这个问题没有解决办法吗?抱歉,这里是 nodejs 的新手。
  • 如果主机只允许在特定端口上进行外部连接,例如 80 或 443,您要么希望在该端口上运行 node.js,要么在节点前设置一个网络服务器.js 将代理请求从 80/443 反向到 3000
  • 谢谢凯文。看起来我确实确实需要一个新主机..我已经尝试了几个小时没有任何成功..他们也不允许在端口 80 上停止 apache,所以我可以在端口 80 上使用节点。非常没用:/
  • 您是否有权在 apache 中创建虚拟主机?这就是反向代理到节点服务器所需的全部内容。

标签: node.js


【解决方案1】:

实际上通过 Apache 访问您的应用服务器(在您的情况下为 nodeJs)是避免安全漏洞等的标准方法。您可以按如下方式配置您的 Apache 服务器:

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:3000/test/
  ProxyPassReverse / http://localhost:3000/test/
</VirtualHost> 

您可以通过http://xxx.xxx.xxx.xxx:80/test 或简单地在http://xxx.xxx.xxx.xxx/test 调用您的应用程序,因为HTTP 隐含80,而apache 将为您调用http://xxx.xxx.xxx.xxx:3000/test

已编辑:这也应该通过 .htacccess 工作 - 这就是 cloudways 想要你做的事情:https://support.cloudways.com/what-can-i-do-with-an-htaccess-file/

【讨论】:

  • 甜蜜!我有一个担心。这不会影响 nodejs 的性能,因为我有一个代理或桥来服务器请求并且仍然需要使用 Apache?我的意思是该解决方案会损害使用 nodejs 的全部意义吗?
  • 在某些方面 - Apache 将通过允许您比 nodeJs 更有效地提供静态资源来提高性能。
  • 谢谢!我刚刚发现 cloudways 也无法访问 apache 配置。那么这段代码还能在 .htaccess 中工作吗?
  • support.cloudways.com/how-to-manage-server-settings 。 -> 尝试将“默认应用程序”设置为您的 nodeJs URL。
【解决方案2】:

测试 node.js 的最佳方法是在您的服务器上使用节点进程管理器,例如 https://www.npmjs.com/package/pm2。 这将为部署节省大量时间。但是您需要 root 访问权限才能安装此软件包。如果您没有 root 访问权限,请让您的托管服务提供商为您安装这些软件包。 如果在任何情况下您都没有获得 root 访问权限并且您无权打开端口并为您的项目安装包。然后使用任何其他主机,例如https://www.linode.com/

【讨论】:

    【解决方案3】:

    尝试查找您的免费 ip。

    npm install find-free-port --save

    然后保存.htaccess

    重写引擎开启

    重写规则 ^$ http://127.0.0.1:3000/ [P,L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    重写规则 ^(.*)$ http://127.0.0.1:3000/$1 [P,L]

    我的空闲端口是 3000。然后加载你的 www.example.com

    【讨论】:

      猜你喜欢
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2018-04-01
      • 2013-05-21
      • 2018-12-10
      相关资源
      最近更新 更多