WordPress async-upload.php间歇性403错误排查求助
WordPress async-upload.php 403错误排查方向(仅多文件上传器触发)
以下是针对该问题的具体排查方向:
1. 会话与CSRF令牌有效性排查
- 检查
wp-config.php中SESSION_COOKIE_EXPIRE、AUTH_COOKIE_EXPIRE的设置值,30分钟触发错误可能和会话过期阈值完全匹配。 - 用浏览器DevTools监控
async-upload.php的请求参数:错误出现时,对比请求中的_wpnonce令牌是否与后台生成的有效令牌一致,服务器可能拒绝了过期或无效的CSRF令牌。 - 若使用Redis/Memcached存储会话,排查缓存服务是否存在会话键提前被回收的配置(比如过期时间过短)。
2. 服务器层的请求限制与拦截
- 检查Nginx配置中的
limit_req、limit_conn规则,确认是否对/wp-admin/async-upload.php设置了过严的并发或频率限制,多文件上传的异步请求可能触发阈值。 - 排查Varnish的VCL配置:确认
wp-admin路径是否被正确排除在缓存规则外,且未添加针对POST请求的隐性拦截逻辑(比如错误的会话验证规则)。 - 检查服务器防火墙(iptables、fail2ban等)的封禁规则,是否存在针对
POST /wp-admin/async-upload.php的自动封禁,且封禁时长为30分钟左右。
3. PHP环境的会话与请求处理
- 查看PHP配置中的
session.gc_maxlifetime值,若设置为1800秒(30分钟),会话垃圾回收机制可能提前清理了后台会话,导致上传请求验证失败。 - 验证PHP的
post_max_size、upload_max_filesize参数,虽然单文件是小型jpg,但多文件上传的总请求大小可能触发限制(可临时调大测试排除)。 - 检查PHP-FPM的
request_terminate_timeout和max_execution_time,若异步上传请求被提前终止,部分服务器会返回403错误而非超时提示。
4. 多文件上传器的特定机制问题
- 对比两种上传器的请求差异:多文件上传器使用XMLHttpRequest异步请求,检查请求头是否缺失
Referer、X-Requested-With等字段,服务器可能对这些字段有强制验证。 - 尝试禁用分片上传:在
wp-config.php中添加define('WP_UPLOAD_SHEDULE', false);,看是否能避免错误(部分WordPress版本支持该配置)。 - 监控浏览器Cookie状态:错误出现时,检查
wordpress_logged_in_*Cookie是否被标记为过期或被清除,这会导致后台请求权限验证失败。
内容的提问来源于stack exchange,提问作者pukos
相关产品推荐
相关产品推荐

