You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX配置问题导致Google Distance Matrix API请求IP异常被拒

问题根因

你怀疑的NGINX配置问题不成立,NGINX仅处理外部访问站点的入站请求,站点代码主动发起的对外API调用属于出站请求,完全不经过NGINX转发,和NGINX配置无关。
实际问题是新重建的AWS Lightsail实例默认开启了IPv6双栈支持,系统路由规则默认优先使用IPv6地址发起对外请求,因此调用Google Distance Matrix API时,Google侧识别到的源IP是实例的IPv6地址,和你在Google Cloud控制台配置的API密钥IP白名单里的IPv4地址不匹配,触发REQUEST_DENIED错误。

验证方法

登录服务器执行以下两条命令即可验证:

  • curl ip.sb 正常会返回你错误日志里的IPv6地址
  • curl -4 ip.sb 强制走IPv4请求,会返回你绑定的原有公网IPv4地址
解决方案

你可以根据自己的需求任选以下一种方案:

方案1:添加IPv6白名单(操作最简单)

如果你的Lightsail实例IPv6地址是固定的,直接执行curl -6 ip.sb拿到实例公网IPv6地址,登录Google Cloud控制台找到对应的API密钥,把该IPv6地址加入IP白名单即可,无需修改任何服务器配置。

方案2:全局配置优先使用IPv4出站(和原有逻辑完全对齐)

修改系统优先级配置,让所有对外请求默认走IPv4:

  1. 编辑配置文件:nano /etc/gai.conf
  2. 找到被注释的配置项 # precedence ::ffff:0:0/96 100,删除行首的#后保存退出
  3. 配置立即生效,无需重启服务,后续所有对外请求都会优先走IPv4

方案3:仅强制Google API请求走IPv4

如果不想修改全局配置,只需要调整Google API请求的代码,指定强制用IPv4发起请求即可:

function google_get_distance( $ori, $dest ) {
        $key = get_option( 'ep_theme_options' )[ 'ep_gm_distance_matrix_api' ];
        $dist_url = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=metric' .
                        '&origins=' . urlencode( $ori ) . '&destinations=' . urlencode( $dest ) . '&key=' . $key;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $dist_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        // 适配原有wp_remote_get返回格式,不需要的话可以直接返回$response
        return [
            'response' => ['code' => $http_code],
            'body' => $response
        ];
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:03