我在 Amazon AWS Ubuntu 上有一个虚拟机,我在其中安装了 Apache2、PHP5 和 MySql。一切运行良好,我的网站在上面运行良好。
虚拟机突然停止访问其他主机。每次请求都会发生这种情况。
当 PHP 脚本开始出现错误时我发现了这一点
使用 file_get_contents() 函数时出现“连接超时”
<?php echo file_get_contents('http://example.com'); ?>
我通过 SSH 进入服务器的命令行,并尝试 ping 外部主机ping google.com
,但没有成功。我尝试使用 apt-get 更新系统sudo apt-get update
,但也没有连接。
有趣的是,如果我尝试访问该网站,服务器通常会收到请求并将该网站返回给浏览器。即互联网连接就在那里。
另一个细节是,我尝试进行的访问file_get_contents() PHP
也是在同一个站点上,而不是在外部站点上,但超时了。
以下是 netstat -lnp 命令的结果:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 957/sshd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1098/mysqld
tcp6 0 0 :::22 :::* LISTEN 957/sshd
tcp6 0 0 :::443 :::* LISTEN 1145/apache2
tcp6 0 0 :::80 :::* LISTEN 1145/apache2
udp 0 0 0.0.0.0:68 0.0.0.0:* 560/dhclient
udp 0 0 0.0.0.0:18032 0.0.0.0:* 560/dhclient
udp6 0 0 :::60689 :::* 560/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 8236 785/dbus-daemon /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 6500 1/init @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 8549 965/acpid /var/run/acpid.socket
unix 2 [ ACC ] SEQPACKET LISTENING 6797 324/systemd-udevd /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 8919 1098/mysqld /var/run/mysqld/mysqld.sock
下面是使用 iptables -L 的结果:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
可能发生什么事?
答案1
对于那些遇到与我相同问题的人,深入研究后发现名称服务器已设置为亚马逊的 IP。
所以我编辑/etc/resolv.conf
并把谷歌名称服务器
nameserver 8.8.8.8
nameserver 8.8.4.4
并且成功了。希望这对某些人有帮助。