1

私のウェブサーバー(nginxでFacebookアプリをホストしている)は、次のようなエラーを受け取り始めました

*907768 FastCGI sent in stderr: "Invalid IPv6 configuration on server, Please disable or get native IPv6 on your server" while reading response header from upstream, client:...

このエラーの原因は何でしょうか?私はいつもこれを得るとは限りません。

4

1 に答える 1

2

エラーはphpコード、より具体的にはfacebooksdkから発生します。Facebookコードがipv6アドレスに接続しようとしてネットワークに到達できない場合にスローされます。これは、システムでipv6が有効になっているが、ipv6接続がないことが原因である可能性があります(base_facebook.phpからの引用)。

// With dual stacked DNS responses, it's possible for a server to
// have IPv6 enabled but not have IPv6 connectivity.  If this is
// the case, curl will try IPv4 first and if that fails, then it will
// fall back to IPv6 and the error EHOSTUNREACH is returned by the
// operating system.
if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) {
    $matches = array();
    $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
    if (preg_match($regex, curl_error($ch), $matches)) {
      if (strlen(@inet_pton($matches[1])) === 16) {
        self::errorLog('Invalid IPv6 configuration on server, '.
                       'Please disable or get native IPv6 on your server.');
        self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        $result = curl_exec($ch);
      }
    }
}

これを処理する正しい方法は、システムでipv6を無効にするか、ipv6接続を取得することです。または、Facebookコードに、コードで次のような方法で常にipv4を使用するように要求することで、エラーを抑制することができるはずです。

Facebook::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
于 2012-09-18T23:15:16.823 に答える