Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法在公共IP Oracle计算云上访问VPS NodeJS服务器_Node.js_Iptables_Oracle Cloud Infrastructure_Web Application Firewall - Fatal编程技术网

Node.js 无法在公共IP Oracle计算云上访问VPS NodeJS服务器

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

我正试图用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 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网关。(什么?我不知道如何检查或执行此操作。即使阅读了更多内容。)
  • 公用子网必须相应地配置路由表和安全列表。(我想我试过了??)
我发现的一篇stackoverflow帖子中也有同样的问题:“我正在使用oracle云。我将查看服务器外部的防火墙设置……谢谢。问题是oracle服务器本身的防火墙设置。问题已解决”() 但他没有说在哪里:)我找了很多,但找不到一个选择


有人能给我指出正确的方向吗?

确实还有一个地方需要在终端外面打开防火墙

  • 转到计算>实例
  • 单击实例名称。您将看到一个详细页面,描述许多属性
  • 单击子网
  • 单击vcn的默认安全列表-
  • 添加入口规则
添加以下规则:

当你的网站运行时,再次尝试浏览你的公共IP,它就可以工作了

要阅读更多关于此的内容,并查看我在何处找到它,请参阅:


在有人提到这是一个解决方案之前,请先旁注。在某个时候,我还尝试了重定向选项将其重定向到另一个端口,并在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