无法访问计算引擎外部 IP

无法访问计算引擎外部 IP

我设置了一个 google 计算引擎实例并安装了 nginx,现在 nginx 正在监听端口 80。我的实例分配了一个静态外部 IP,但我无法访问我的外部 IP 地址。

为什么这必须这么难?所有的教程都只是说:

安装 nginx 并转到你的外部 ip,你应该到达 nginx 欢迎屏幕

我为 http/https 设置了防火墙规则,但没有任何效果。以下是一些需要查看的内容:

nginx 服务器配置:

listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
  try_files $uri $uri/ =404;
}

实例屏幕截图: 在此处输入图片描述

nginx 正在运行:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3490/nginx
tcp6       0      0 :::80                   :::*                    LISTEN      3490/nginx

我想去:104.196.111.24但它只是说safari failed to open the page

运行ifconfig返回此结果:

docker0   Link encap:Ethernet  HWaddr 02:42:de:3f:fb:67  
          inet addr:172.18.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:3802 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2248 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:21591383 (20.5 MiB)  TX bytes:351275 (343.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:54 errors:0 dropped:0 overruns:0 frame:0
          TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3568 (3.4 KiB)  TX bytes:3568 (3.4 KiB)

答案1

关闭 80 端口

$ nmap -p80 104.196.111.24
Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-09 16:25 CET
Nmap scan report for 24.111.196.104.bc.googleusercontent.com (104.196.111.24)
Host is up (0.14s latency).
PORT   STATE  SERVICE
80/tcp closed http

这导致我认为防火墙配置有问题,尽管您的屏幕截图上勾选了“允许 http 流量”和“允许 https 流量”选项。现在我对 GCE 的防火墙配置不太了解。

(注:稍后:截至目前,nmap报告主机已关闭。)

关于我最初的帖子

我的初始帖子(如下)适用于nginx在真实主机上运行的实例。我忽略了你实际运行虚拟机,其中监听本地地址(主机上的“其他东西”将请求代理到虚拟机)可能是正常的nginx。但是我不明白为什么内部 IP 地址没有显示在您的ifconfig输出中。

初始帖子内容:

如果我理解正确的话,您在地址为 104.196.111.24 的服务器上运行了一个 nginx 实例。当您尝试在 Web 浏览器中访问此地址时,会出现错误。

因此,我不完全确定这是否会起作用,但我注意到你的 nginx 实例正在监听 0.0.0.0(ipv4)上的端口 80,这是一个本地地址。维基百科对此有如下解释:

在互联网协议版本 4 中,地址 0.0.0.0 是一个不可路由的元地址,用于指定无效、未知或不适用的目标。

而且:

在服务器上下文中,0.0.0.0 表示“本地机器上的所有 IPv4 地址”。

因此我认为这里有一些需要修复的地方,因为nginx似乎只能从服务器上的本地地址访问。

此外,如果我将自己设置nginx为在 0.0.0.0 上监听任何网站的 80 端口,那么浏览该站点将返回错误(例如连接已重新初始化,而不是来自 的错误nginx)。

因此,我会尝试设置nginx为监听外部地址上的端口 80,例如:

listen 104.196.111.24:80;

(当然,之后请使用 检查这是否正确nginx -t,然后使用 重新加载 nginx 规则service nginx reload)。

编辑:来自的附加信息ifconfig让我认为网络配置确实存在错误(或未设置),但我无法解释:网卡(eth0,正在运行)的地址是 172.17.0.2,属于某些特殊的 IANA 保留地址范围。我期望 104.196.111.24 出现在ifconfig的输出中,但事实并非如此。我甚至不明白如何在没有设置的情况下通过 ssh 进入 104.196.111.24。无论如何,我认为nginx只要它在 0.0.0.0 上监听,就无法从外部访问,必须修复此问题才能解决问题,这可以通过修复网络配置来实现。

答案2

使用通配符即可

    listen *:80;
    listen *:443 ssl;

答案3

你来错地方了。根据 ifconfig 结果,你似乎位于谷歌云壳并不是ssh 进入您的实例 shell。如果您在实例 shell 中,ifconfig 结果将与控制台中显示的内部 ip 地址匹配。

答案4

检查项目 VPC 的防火墙规则:

$ gcloud beta compute firewall-rules list 

如果80端口TCP没有覆盖,则需要添加:

$ gcloud beta compute firewall-rules create default-allow-http80 \
> --direction ingress --action allow --source-ranges 0.0.0.0/0 
> --rules tcp:80

相关内容