我在WordPress中有一个功能,用于向特定的Web服务器发送POST请求,称为ALLOWED_SERVERS
,这些服务器都位于私有IP范围内。这些ALLOWED_SERVERS
都在负载均衡器后面。然而,我遇到了一个问题,我开始更新https://dev.com上的帖子,请求没有正确设置。
define(
'ALLOWED_SERVERS',
[
'192.168.0.1',
'192.168.0.2',
]
);
function create_purge_request_data($server_ip): array
{
$url = parse_url(home_url());
return [
'url' => "{$url['scheme']}://{$server_ip}/wp-json/cache/v1/purge/",
'type' => 'POST',
'headers' => [
'Content-Type' => 'application/json',
'Host' => $url['host']
],
'data' => json_encode(['host' => $url['host']])
];
}
function send_purge_cache_request()
{
$request_data = array_map('create_purge_request_data', ALLOWED_SERVERS);
Requests::request_multiple($request_data);
}
add_action('post_updated', 'send_purge_cache_request');
字符串
- 我检查了第一台服务器(www.example.com)上的nginx日志192.168.0.1,但注意到访问IP已更改为同一台服务器的公网IP。理想情况下,它应该保持为192.168.0.1,因为请求是发送到同一台服务器的。此外,请求URL已被修改为“https://testdev.com//wp-json/cache/v1/purge/”。(我使用命令“ssh testdev.com”访问第一个服务器)。
0.245 101.108.225.123 - - [02/Aug/2023:17:48:50 +0900] "POST //wp-json/cache/v1/purge/ HTTP/1.1" 404 164 "https://testdev.com//wp-json/cache/v1/purge/" "php-requests/1.7-3470169" "-" "-" "testdev.com"
型
- 我也检查了第二台服务器(192.168.0.2)上的nginx日志,但我注意到访问IP和URL与第一台服务器上的不同。我期望主机结果是dev.com,我从那里发送了一个请求,而不是testdev.com。
0.000 192.168.0.1 - [01/Aug/2023:14:20:48 +0900] "POST /wp-json/cache/v1/purge/ HTTP/1.1" 301 162 "http://192.168.0.2/wp-json/cache/v1/purge/" "php-requests/1.7-3470169" "-"
"-" "testdev.com" "-"
型
问题是,为什么nginx日志中显示的请求表明它是从testdev.com发送的,而不是实际的源dev.com,根据上面的代码?
1条答案
按热度按时间h6my8fg21#
为什么nginx日志中显示的请求表明它是从testdev.com发送的,而不是实际的源dev.com,按照上面的代码?
不会的
您的日志条目不符合标准格式。我怀疑这里报告的是处理请求的虚拟主机。
由于您正在使用HTTP请求的IP地址,因此这将绕过负载均衡器并直接进入Web服务器。它 * 看起来 *,你正在与请求瞄准的wordpress安装运行在一个虚拟主机上,而不是默认。
至于你应该怎么做……这是一个更复杂的问题。
一般来说,硬编码的IP地址是不好的。如果您的站点位于负载均衡器之后,则这种方法不会扩展到单个站点。OTOH你没有提供任何关于负载均衡器和nginx的细节。
如果是我,我会在nginx配置和负载均衡器上为每个节点创建特定的别名,例如:如果您的站点是'www.example.com',我会在nginx配置中设置
server_name www.example.com www*.example.com;
,或者在负载均衡器Map中:字符串
...或在DNS中添加直接指向源主机的特定记录。
并在$ALLOWED_SERVERS中使用特定别名。
......而且由于您可能需要一个访问控制机制来防止滥用,您可能会限制访问/wp-json/cache/v1/purge -但如果不知道这是什么样子,我不能建议您这样做。