我的 Debian 服务器同时具有 IPV4 和 IPV6 地址。
我在我的 php 脚本中使用 file_get_contents 从 youtube 获取视频标题:
if($content=file_get_contents("http://www.youtube.com/get_video_info?video_id=".$video_id)) {
}
今天我注意到这个脚本挂了很长时间并且没有得到任何视频标题。
Nginx 日志文件显示以下内容:
upstream timed out (110: Connection timed out) while reading response header from upstream.
我决定用 wget 做一个测试:
wget http://www.youtube.com/get_video_info?video_id=XX_hWpPnd3I
--2015-09-02 13:34:25-- http://www.youtube.com/get_video_info?video_id=XX_hWpPnd3I
Resolving www.youtube.com (www.youtube.com)... 2a00:1450:4007:80e::200e, 216.58.208.238
Connecting to www.youtube.com (www.youtube.com)|2a00:1450:4007:80e::200e|:80... failed: Connection timed out.
Connecting to www.youtube.com (www.youtube.com)|216.58.208.238|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-www-form-urlencoded]
Saving to: `get_video_info?video_id=XX_hWpPnd3I'
[ <=> ] 400 --.-K/s in 0s
2015-09-02 13:36:34 (42.9 MB/s) - `get_video_info?video_id=XX_hWpPnd3I' saved [400]
如您所见,服务器正在尝试使用 IPv6。当它不起作用时,它会使用 IPV4。
我该如何修复此问题?phpinfo() 显示 IPV6 已启用。为什么它不能与 file_get_contents 和 wget 一起使用?
答案1
这是防火墙问题。CSF 中禁用了 IPV6。