我build立了一个谷歌计算引擎实例,并安装了nginx,现在nginx正在侦听端口80.我有一个静态外部IP分配给我的实例,我只是不能访问我的外部IP地址。
为什么这一定很难? 所有的教程只是说:
安装nginx并转到你的外部ip,你应该到达nginx的欢迎界面
我为http / https设置防火墙规则,但没有任何工作。 这里有一些东西要看:
nginx服务器configuration:
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)
$ 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
这导致认为在防火墙configuration中有什么问题,尽pipe在屏幕截图上已经勾选了“允许HTTPstream量”和“允许httpsstream量”选项。 现在我不了解GCE的防火墙configuration。
(注意稍晚一点:截至目前, nmap报告主机已closures。)
我的第一篇文章,如下所示,将适用于在真实主机上运行的nginx实例。 我错过了实际运行虚拟机的事实,让nginx监听本地地址(主机上的“别的东西”代理虚拟机的请求)可能是正常的。 不过,我不明白为什么内部IP地址不显示在您的ifconfig输出。
如果我理解的很好,你可以在一个地址为104.196.111.24的服务器上运行一个nginx实例。 而当你尝试在networking浏览器中访问这个地址时,你会得到一个错误。
所以,我不是绝对确定这会工作,但我注意到你的nginx实例正在监听端口80上的0.0.0.0(ipv4),什么是本地地址。 维基百科对此说:
在Internet协议版本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 -t service nginx reload加载nginx规则)。
编辑: ifconfig的额外信息让我觉得networkingconfiguration中确实有错误(或不是设置),但我不能解释它:网卡的地址(eth0,正在运行)是172.17.0.2,属于一些特殊的IANA保留的地址范围。 我期望104.196.111.24显示在ifconfig的输出,但它不。 我什至不知道你怎么能ssh进入104.196.111.24没有安装。 无论如何,我认为nginx只要在0.0.0.0上监听,就不能从外部连接,为了解决这个问题,可以通过修改networkingconfiguration来解决。
使用通配符,它将工作
listen *:80; listen *:443 ssl;