CLI cURL 运行完美,但是带有 mod_php 的 Apache 无法解析主机,如何修复?

CLI cURL 运行完美,但是带有 mod_php 的 Apache 无法解析主机,如何修复?

设置:

  • cURL 7.32.0
  • Apache 2.2.25
  • PHP 5.5.4

每当我尝试:

$ch = curl_init('www.google.com');
curl_exec($ch);

var_dump(curl_error($ch));

在 PHP 中,我得到:

无法解析主机:www.google.com

如果我更改为curl_init('80.233.168.207')(已解析 google.com),则脚本将执行。

虽然curl www.google.com在 CLI 中运行时,我得到了一个302 MovedHTML 页面,因为重定向到本地化站点 (*.lv),但这仍然意味着 cURL 已成功执行。

我见过多个类似的问题(但不在 SE 上),其中大多数都说 Apache 是在 Network Manager 之前或同时启动的,因此没有收到 DNS 信息。大多数问题的答案都解释说,可以通过明确停止然后启动 Apache 守护程序(而不是重新启动/优雅重启)来暂时解决/调试该问题。

fsockopenfile_get_contents但运行却十分顺畅。

我的 Apache 虚拟主机:

<VirtualHost *.777>
    ServerAdmin [email protected]
    ServerName localhost

    DocumentRoot "/srv/stone/public"

    ErrorLog "/srv/stone/app/storage/logs/apache-errors.log"
    CustomLog "/srv/stone/app/storage/logs/apache-custom.log" common

    <Directory /srv/stone/public>
        php_admin_value open_basedir /

        # Pretty URL rewrites, better not to rely on .htaccess
        <IfModule mod_rewrite.c>
            Options -MultiViews

            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^ index.php [L]
        </IfModule>

        # Prevent further overrides
        AllowOverride None

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

并且全局配置仅仅有一个特定的条目Listen 777

,都导致 DNS 问题,所以,我想我可能也遇到了问题,而且,它看起来很像。

我尝试过将虚拟主机条目更改为0.0.0.0:777和其他配置,但无济于事。

我该如何修复此问题?

答案1

看来问题出在我的身上/etc/resolv.conf

我设置了一个自定义网络连接管理器,它执行外部命令来从特定配置文件设置名称服务器。设置将简单地删除 的内容/etc/resolv.conf,添加新信息,然后启动网络接口,设置其参数(IP、掩码、Cast、Gate),然后就好了。

显然这搞砸了。我想我必须寻找不同的 Before/After 目标并编写自定义resolv.conf更新程序。

我现在确实留下了resolv.conf静态,这似乎解决了这个问题。

最后,很明显这是 DNS 问题。谢天谢地,问题已经修复。

答案2

您是否尝试过 CURL_IPRESOLVE_V4 选项?

$ch = curl_init('www.google.com');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
var_dump(curl_error($ch));

如果使用 CURLOPT_HEADER 选项,标题的输出是什么?

相关内容