【发布时间】:2016-04-30 14:21:00
【问题描述】:
在托管的 Ubuntu 虚拟机上,我为 http 和 https 运行 nginx,并且可以从虚拟机内使用公共 IP 访问它们:
curl http://159.203.0.5
在 VM 外部执行相同操作失败 - 连接超时。
端口已打开:
root@production01:~# ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
而nginx正在监听外部接口:
root@production01:~# netstat -an | grep "LISTEN "
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:2003 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:2004 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:2812 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::25 :::* LISTEN
还能是什么?
【问题讨论】:
-
这个服务器应该在 VPN 内(检查公网 IP 是否真的是 159.203.0.5)或被 DigitalOcean 防火墙...
-
是的,公网IP是129.203.0.5。我可以 ping 它和 SSH,但是 http 和 https 在外部没有响应。
-
iptables 可以限制入站流量,所以这是第一次检查。有时服务器上存在许多 nginx 二进制文件,这会导致奇怪的行为。你确定是 nginx(或好的 nginx 二进制/进程)在监听吗?网络统计-tlnp | awk '/:80 */ {split($NF,a,"/");打印 a[2],a[1]}' 然后使用“nginx -V”检查进程是否加载了正确的 conf 文件。在此检查之后,确保您没有配置问题(nginx.conf 和/或专用配置文件)。您应该在问题中添加指向您的配置文件的链接。
-
请添加以下命令的输出:
iptables -L -n -v -x、iptables -L -n -v -x -t nat。此外,Nginx 似乎只在 IPv4 接口中侦听外部,但它没有在 IPv6 接口中侦听。根据几个因素,您可能会通过 IPv6 地址访问您的服务器:确保不是这种情况。使用tcpdump -i any port 443并尝试执行连接,您应该会看到传入的数据包显示正在使用的实际IP 地址。另外,在使用netstat的时候,使用netstat -putan也可以显示进程名。 -
抱歉,在没有找到解决方案后,我在周末关闭了虚拟机。因此,该 IP 现在已重新分配给其他人。 IPv6 角度很感兴趣,我没有检查。
标签: nginx server ip digital-ocean cloud-hosting