【问题标题】:External http connections fail (ports open)外部 http 连接失败(端口打开)
【发布时间】:2016-04-30 14:21:00
【问题描述】:

在托管的 Ubuntu 虚拟机上,我为 httphttps 运行 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 -xiptables -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


【解决方案1】:

我认为问题不在 VM 上,而是在您尝试连接到 VM 的机器上。这台机器上的其他连接是否正常工作?

看看这个:

foo@bar:~$ curl 159.203.0.5 -v
* Rebuilt URL to: 159.203.0.5/
* Hostname was NOT found in DNS cache
*   Trying 159.203.0.5...
* Connected to 159.203.0.5 (159.203.0.5) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: 159.203.0.5
> Accept: */*
>
< HTTP/1.1 404 Not Found
< X-Powered-By: Express
< X-Content-Type-Options: nosniff
< Content-Type: text/html; charset=utf-8
< Content-Length: 13
< Date: Tue, 02 Feb 2016 17:36:31 GMT
< Connection: keep-alive
<
Cannot GET /
* Connection #0 to host 159.203.0.5 left intact

我没有超时,这个 404 对我来说看起来不错。

【讨论】:

  • 抱歉,在没有找到解决方案后,我在周末关闭了 VM。因此,该 IP 现在已重新分配给其他人。
猜你喜欢
  • 2014-02-09
  • 2013-08-12
  • 2011-12-08
  • 2016-05-27
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
相关资源
最近更新 更多