问题描述
我正在尝试使用 Ubuntu 18.04 在 Oracle Cloud Compute VPS(永远免费)上建立我的 nodejs 网站。 (在这种情况下,它是 Oracle 服务器似乎非常重要)。我可以卷曲本地主机(然后它返回 HTML),但我无法通过我的电脑的公共 IP 访问它。
为了解决端口 80 的 sudo,我申请了:
sudo apt-get install libcap2-bin
sudo setcap 'cap_net_bind_service=+ep' `which node`
它确实在内部运行:
pm2 start bin/www
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ www │ fork │ 496 │ online │ 0% │ 15.5mb |
pm2 log
不返回错误。
sudo netstat -tulpn | grep 80
返回:
tcp6 0 0 :::80 :::* LISTEN 26444/node /opt/por
如果您想“哦,不,它在 ipv6 上运行,您应该在 nodejs 中添加监听(端口,“0.0.0.0”)”,我尝试过,然后它在下面返回,但仍然存在相同的问题:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26487/node /opt/por
curl localhost
返回我的主页 html。
在我的计算机浏览器中通过公共 ip 访问它是问题所在,因此问题出在 Oracle 制作的防火墙中。
我发现 Oracle 已经设置了一些 iptables 规则。有些人只是说:禁用所有这些,但我发现这有点安全风险。 因此,我只想打开我需要的端口(端口 80)。 所以我尝试了几乎所有我能找到的命令来做到这一点(下面的命令以及更多我记不清了)。
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo netfilter-persistent save
我当前的 iptables 在以下位置可见: 须藤 iptables -L -n -v https://pastebin.com/ibqWUqjA
NAT iptables 在以下位置可见: 须藤 iptables -t nat -L -n -v https://pastebin.com/QGxdTsJ1
我必须说,我不是网络专家。我只知道如何在非 Oracle 云服务器(我的树莓派,在我的调制解调器中配置)上设置基本的 NodeJs 服务器。所以我还没有处理到这种程度的 iptables 和高级云环境。 我试图通过观看视频和 oracle 环境来阅读 iptables 主题: https://docs.oracle.com/en-us/iaas/Content/Network/Tasks/managingpublicIPs.htm 但是,我必须说这是一种信息过载。在链接上说:
- 实例必须位于公有子网中。 (检查)
- 实例必须具有公共 IP 地址。 (也检查)
- 实例的 VCN 必须有一个 Internet 网关。(什么?我不知道如何检查或执行此操作。即使阅读更多内容。)
- 公共子网必须有相应配置的路由表和安全列表。 (我想我试过了??)
我发现一个完全相同问题的 stackoverflow 帖子说:“我正在使用 oracle 云。我将查看服务器外部的防火墙设置。...谢谢。问题是 oracle 的防火墙设置服务器本身。问题已解决”(Nodejs on linux not accessible outside Server) 但他没有说在哪里:(。我搜索了很多,但找不到选项。
有人能指出我正确的方向吗?
解决方法
确实还有一个地方需要在终端外打开防火墙。
- 转到“计算”>“实例”
- 点击您的实例名称。您将看到一个详细页面,描述了许多属性。
- 点击子网。
- 点击 vcn-... 的默认安全列表
- 添加入口规则
尝试在您的网站运行时再次浏览您的公共 IP,它可以正常工作!
要阅读有关此内容的更多信息并查看我在哪里找到它,请参阅:
https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm#Default
https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securityrules.htm#stateful