我正在使用 WordPress,并且安装了 jwt。
我的 WordPress 安装在子域上,我想从主域调用 jwt。
当我从邮递员处调用此 URL 时:
https://subdomain.domain.com/wp-json/jwt-auth/v1/token
它返回一个响应,但是当我从主域内部调用此 URL 时:
$url = 'https://subdomain.domain.com/wp-json/jwt-auth/v1/token';
$data = array(
'username' => '***',
'password' => '***'
);
$data_string = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
}
curl_close($ch);
die("dd".$result.$error_msg);
它返回:
ddCould not resolve host: subdomain.domain.com
我的 DNS 配置:
A @ myip
CNAME www maindomain
A subdomain myip
问题出在哪里?
您遇到的错误,
Could not resolve host: subdomain.domain.com
,表示 DNS 解析问题。这意味着您的主域尝试向您的子域发出请求的服务器找不到与 subdomain.domain.com
关联的 IP 地址。
您可以采取一些步骤来排查和解决此问题:
DNS 传播:如果您最近创建或更新了子域的 DNS 记录,则它可能尚未完全传播。 DNS 传播通常需要长达 48 小时。您可以使用
https://www.whatsmydns.net/
等工具来检查您的 DNS 设置是否已传播到各个位置。
DNS 配置:仔细检查您的 DNS 设置,确保
subdomain
的 A 记录正确指向您服务器的 IP 地址。您发布的设置似乎正确,A 记录将子域映射到 myip
。
本地 DNS 缓存:在向子域发出外部请求的服务器上,可能存在过时的 DNS 缓存。您可以根据服务器的操作系统尝试刷新 DNS 缓存:
nscd
重新启动 sudo service nscd restart
守护进程,或使用 sudo systemd-resolve --flush-caches
刷新 DNS 缓存。ipconfig /flushdns
。服务器网络配置:确保您的主域所在的服务器没有任何防火墙或网络配置阻止其解析外部 DNS 或进行出站 HTTP 调用。
cURL 选项:您的 cURL 选项似乎已针对安全 HTTPS 请求正确设置。但是,在进行故障排除时,您可能需要通过将
CURLOPT_SSL_VERIFYHOST
和 CURLOPT_SSL_VERIFYPEER
设置为 0
来暂时禁用它们。这允许您测试 SSL 证书或 SSL 配置是否存在问题。请记住在测试后将这些选项恢复为安全设置(1
为 CURLOPT_SSL_VERIFYHOST
,2
为 CURLOPT_SSL_VERIFYPEER
)。
从命令行进行测试:要确保问题出在您的服务器上,而不是您的特定 PHP 脚本上,请尝试在托管您的主域的服务器上的命令行中使用
ping
、dig
或 nslookup
看看它是否可以解析您的子域。此外,您可以从命令行运行 curl
来测试与子域的连接。
错误记录:如果上述步骤都没有帮助,请确保记录 PHP 和 cURL 中所有可能的错误,以获取有关可能出现问题的更多信息。
托管提供商限制:某些托管提供商可能具有阻止 DNS 解析或来自其网络内的出站 HTTP 请求的限制。您需要联系您的托管提供商以验证此类限制是否到位。
完成这些步骤并确保您的子域可从主域服务器解析后,您的 PHP cURL 请求应该能够连接 WordPress 子域的 JWT 插件端点并接收响应,不会出现任何问题。