Node.js 无法在公共IP Oracle计算云上访问VPS NodeJS服务器
我正试图用Ubuntu18.04在Oracle云计算VPS(永远免费)上建立我的nodejs网站。(在本例中,它是Oracle服务器似乎非常重要)。我可以curl localhost(然后它返回HTML),但我不能从我的pc通过公共ip访问它 为了解决80端口的sudo问题,我申请了:Node.js 无法在公共IP Oracle计算云上访问VPS NodeJS服务器,node.js,iptables,oracle-cloud-infrastructure,web-application-firewall,Node.js,Iptables,Oracle Cloud Infrastructure,Web Application Firewall,我正试图用Ubuntu18.04在Oracle云计算VPS(永远免费)上建立我的nodejs网站。(在本例中,它是Oracle服务器似乎非常重要)。我可以curl localhost(然后它返回HTML),但我不能从我的pc通过公共ip访问它 为了解决80端口的sudo问题,我申请了: sudo apt-get install libcap2-bin sudo setcap 'cap_net_bind_service=+ep' `which node` 它确实在内部运行: pm2 start
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日志
不返回任何错误
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)。
因此,我尝试了几乎所有我能找到的命令(下面的命令和许多我记不起来的命令)
我当前的iptables可在以下位置看到:
sudo iptables-L-n-v
NAT iptable在以下位置可见:
sudo iptables-t nat-L-n-v
我必须说,我不是网络专家。我只知道如何在非Oracle云服务器上设置基本的NodeJs服务器(我家里有我的树莓派,调制解调器中有配置)。因此,我还没有将iptables和高级云环境处理到这样的程度。
我试图通过观看视频了解iptables主题,并通过以下方式了解oracle环境:
然而,我必须说,这是一个相当多的信息。链接上写着:
- 实例必须位于公用子网中。(支票)
- 实例必须具有公共IP地址。(同时检查)
- 实例的VCN必须有一个internet网关。(什么?我不知道如何检查或执行此操作。即使阅读了更多内容。)
- 公用子网必须相应地配置路由表和安全列表。(我想我试过了??)
有人能给我指出正确的方向吗?确实还有一个地方需要在终端外面打开防火墙
- 转到计算>实例
- 单击实例名称。您将看到一个详细页面,描述许多属性
- 单击子网
- 单击vcn的默认安全列表-
- 添加入口规则
在有人提到这是一个解决方案之前,请先旁注。在某个时候,我还尝试了重定向选项将其重定向到另一个端口,并在nodejs的bin/www文件中编辑了此选项。“sudo iptables-a PREROUTING-t-t nat-I eth0-p tcp-dport 80-j redirect-to port 8080”`之后,我使用存储的备份重置了我的iptables在一个文件中(这没有任何帮助,setcap选项对于sudo来说工作得很好)。
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