【发布时间】: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 上的请求。我还允许 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 已打开。但是,如果我在外部(即我的 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