【问题标题】:Cannot access Express web server running on Ubuntu server from outside world无法从外部访问运行在 Ubuntu 服务器上的 Express Web 服务器
【发布时间】:2019-02-02 13:53:49
【问题描述】:

这可能是 StackOverflow 上最常见的问题之一,但我已经尝试了所有我知道要尝试的方法。

我刚刚购买了我的第一个域名,打算在 Linode 上运行一个网站。我的 Linode 公网 IP 是 45.79.142.131。为了测试一切正常,我设置了一个简单的 Express Web 服务器,它提供一个简单的 Hello, World。服务器代码:

const express = require('express')
const app = express()

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(80, () => console.log('Example app listening on port 80!'))

为了让 Express 绑定 80 端口(注意:我不会在实际部署中这样做;这只是一个肮脏的测试),我使用以下命令:

$ sudo node server-80.js 
Example app listening on port 80!

如果我在服务器本地使用curl,我会收到响应:

$ curl 45.79.142.131:80
Hello World!

但是,如果我使用网络浏览器或外部 curl,服务器不会提供响应。

$ curl 45.79.142.131:80
curl: (7) Failed to connect to 45.79.142.131 port 80: Operation timed out

我的第一个猜测是防火墙阻止了我的外部请求。我正在使用ufw 来管理我的防火墙。我使用 `` 来允许端口 80 上的请求。我还允许 sshhttps 和一个虚拟端口 3000。我还使用 sudo ufw reload 重新加载了防火墙。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
3000/tcp                   ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
3000/tcp (v6)              ALLOW       Anywhere (v6)  

在服务器本地运行 nmap 会提供以下输出:

$ nmap localhost -Pn

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-27 22:12 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds

似乎端口 80 已打开。但是,如果我在外部(即我的 Mac)运行 nmap,我不会看到端口 80 处于打开状态。

$ nmap 45.79.142.131 -Pn
Starting Nmap 7.70 ( https://nmap.org ) at 2018-08-27 22:14 EDT
Nmap scan report for li1241-131.members.linode.com (45.79.142.131)
Host is up (0.096s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 47.51 seconds

我很茫然。我真的不知道这里发生了什么。然而,更奇怪的是,如果我在端口 3000(和sudo ufw allow 3000/tcp)上运行我的 Express Web 服务器,一切都会完美无缺。我能够从网络服务器获得响应。端口 80 出了问题。看起来很像防火墙阻止了我的请求,但我专门为端口 80 添加了一个例外。

如果有任何日志或其他信息有助于诊断问题,我很乐意分享。

【问题讨论】:

  • Linode上有网络安全组设置吗?如果可以,请检查您的 Linnode 安全配置。因为 Azure 和阿里云等一些云计算供应商提供了一些虚拟网络子网安全策略来保护您的 VM。
  • 我不这么认为。我正在查看 Linode 发布的故障排除指南。在无法连接到 Web 服务器部分下,没有提及需要在 Linode 实例上进行的任何特殊配置以允许端口 80 流量。它确实建议检查是否允许端口 80 通过防火墙。我应该为端口 80 对 iptables 执行 grep 吗?也许ufw 在某处造成了一些错误配置?
  • 所以,我不假思索地刷新了我的iptables,同时还让ufw 拒绝了所有传入流量,所以我无意中终止了我的ssh 连接。我从头开始重新配置了我的 Ubuntu 安装。幸运的是,现在一切正常!我可以通过端口 80 访问我的虚拟服务器!我的最佳猜测是,当我第一次学习使用ufw 时,我不小心错误地配置了我的iptables,它以某种方式影响了端口 80。

标签: node.js http express ubuntu webserver


【解决方案1】:

我遇到了类似的问题,对我有用的(在 Ubuntu 21.10 上)是允许 nodejs 应用程序正在使用的端口通过 ubuntu 防火墙:

sudo ufw allow 8080

要允许所有端口(可能不太安全),请使用以下命令禁用防火墙:

ufw disable

【讨论】:

    【解决方案2】:

    在将ufw 设置为默认拒绝传入流量后,我不假思索地刷新了我的iptables。这杀死了我的ssh 连接。我从头开始完全重建了我的 Ubuntu 实例。当需要使用ufw 配置我的防火墙时,我只允许sshhttp/tcp。幸运的是,一切似乎都按预期工作!我可以通过端口 80 访问我的虚拟 Web 服务器。

    我不知道出了什么问题。我唯一能想到的是我的iptables 不知何故进入了严重错误配置的状态。也许我在第一次学习如何使用ufw 时发出了错误的命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2018-08-22
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多