无法从外部访问在Ubuntu服务器上运行的Express Web服务器

时间:2018-08-28 02:31:42

标签: node.js http express ubuntu webserver

这可能是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!

但是,如果我使用Web浏览器或从外部卷曲,则服务器不会提供响应。

$ 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似乎已打开。但是,如果我在外部运行nmap(即Mac),则看不到端口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服务器,则一切正常。我能够从Web服务器获得响应。关于端口80的某些特定信息出了问题。似乎防火墙阻止了我的请求,但是我专门为端口80添加了一个例外。

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

1 个答案:

答案 0 :(得分:0)

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

我不知道出了什么问题。我唯一能想到的是我的iptables某种程度上处于配置错误的状态。也许当我第一次学习如何使用ufw之类的东西时发出了一个错误的命令。