这可能是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上的请求。我还允许ssh
,https
和虚拟端口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添加了一个例外。
如果有任何有助于诊断问题的日志或其他信息,我很乐意与您分享。
答案 0 :(得分:0)
在将iptables
设置为默认拒绝传入流量之后,我无意中刷新了ufw
。这杀死了我的ssh
连接。我从头开始完全重建了我的Ubuntu实例。是时候用ufw
配置防火墙了,我只允许了ssh
和http/tcp
。幸运的是,一切似乎都按预期工作!我可以通过端口80访问我的虚拟Web服务器。
我不知道出了什么问题。我唯一能想到的是我的iptables
某种程度上处于配置错误的状态。也许当我第一次学习如何使用ufw
之类的东西时发出了一个错误的命令。