如何记录发送到wp-admin/admin-ajax.php的请求及对应响应内容
WordPress admin-ajax.php 请求记录排查方案
定向记录指定插件请求(推荐,零核心修改)
该方案只会记录你自研插件的AJAX请求,不会采集其他接口数据,对生产环境性能影响极小,无需修改WordPress核心文件。
你可以直接将以下代码添加到当前主题的functions.php文件,或者你自研插件的主入口文件中:
// 定向记录指定admin-ajax接口的请求与响应数据 add_action('admin_init', 'log_custom_admin_ajax_data', 1); function log_custom_admin_ajax_data() { // 请替换为你插件注册AJAX接口时使用的action名称 $target_action = 'your_custom_action_name'; // 仅匹配目标AJAX请求 if (defined('DOING_AJAX') && DOING_AJAX && isset($_REQUEST['action']) && $_REQUEST['action'] === $target_action) { // 组装请求日志数据 $log_info = [ 'request_time' => current_time('mysql'), 'user_ip' => $_SERVER['REMOTE_ADDR'], 'request_headers' => getallheaders(), 'request_params' => $_REQUEST ]; // 捕获响应输出 ob_start(function($response_buffer) use ($log_info) { $log_info['response_code'] = http_response_code(); $log_info['response_content'] = $response_buffer; // 日志存储路径,请提前创建对应目录并配置禁止公网访问 $log_path = WP_CONTENT_DIR . '/uploads/private_ajax_log/'.date('Y-m-d').'.log'; file_put_contents($log_path, json_encode($log_info, JSON_UNESCAPED_UNICODE).PHP_EOL, FILE_APPEND); return $response_buffer; }); } }
配置注意事项
- 提前在
wp-content/uploads/目录下创建private_ajax_log文件夹,权限设置为755 - 在该目录下创建
.htaccess文件,写入以下内容禁止公网访问日志文件:deny from all - 排查完成后请及时删除日志代码和日志文件,避免占用存储空间和泄露敏感信息
全量记录所有admin-ajax请求(需服务器权限)
如果你需要验证是否存在CDN、服务器层面的缓存命中,可以直接在Web服务器配置中添加专属日志规则。
Nginx配置示例
首先在Nginx全局http块中定义自定义日志格式:
log_format admin_ajax_log '$time_local | $remote_addr | $request_method | $request_uri | ' '$status | $request_time | $upstream_cache_status | ' '"$http_user_agent" | $request_body | $sent_http_cache_control';
然后在对应站点的server块中添加匹配规则:
location ~* /wp-admin/admin-ajax.php { access_log /var/log/nginx/wp_admin_ajax.log admin_ajax_log; # 保留原有的admin-ajax.php处理配置(如fastcgi_pass相关规则) }
配置完成后重载Nginx即可生效,日志中$upstream_cache_status字段会直接显示缓存命中状态:HIT为命中缓存,MISS为未命中缓存,BYPASS为跳过缓存。
Apache配置示例
在站点虚拟主机配置中添加以下规则:
SetEnvIf Request_URI "^/wp-admin/admin-ajax.php" is_admin_ajax CustomLog /var/log/apache2/wp_admin_ajax.log "%t | %h | %m | %U | %s | %D | %{Cache-Control}o | %{User-Agent}i" env=is_admin_ajax
重载Apache后即可生成专属日志。
缓存问题验证方法
拿到日志后可以通过以下特征确认是否为缓存导致的异常:
- 相同请求参数下,服务器时间已变更但响应内容完全一致
- 响应头
Cache-Control字段被设置了超过1秒的强缓存时间 - 服务器日志中
upstream_cache_status出现HIT状态(正常情况下admin-ajax请求应该全部为BYPASS或者MISS)
内容的提问来源于stack exchange,提问作者David Bain
相关产品推荐
相关产品推荐

