Drupal 7.67 HTTPS环境下AJAX批量请求异常终止问题排查求助
让我来拆解一下你遇到的这个问题——HTTP环境正常但HTTPS下30分钟左右批量任务就会因为AJAX连接中断失败,结合你给出的错误信息和环境细节,这个问题大概率和服务器的HTTPS配置、超时机制或者Drupal的HTTPS识别逻辑有关,咱们一步步来梳理:
一、核心差异定位:HTTP vs HTTPS的关键区别
既然同一服务器上HTTP环境完全正常,那基本可以排除代码逻辑、PHP基础配置(你提到的max_input_vars等参数)或者数据库层面的问题,重点要放在HTTPS专属的配置上。
二、具体排查方向与解决建议
1. 先确认Drupal的HTTPS环境识别配置
Drupal如果没有正确识别当前是HTTPS环境,可能会导致AJAX请求的URL生成异常(比如偷偷从HTTPS跳回HTTP),进而引发跨协议的连接重置。这一步建议优先处理:
在Drupal的settings.php文件中添加以下配置:
$conf['https'] = TRUE; // 如果你的服务器是通过反向代理(比如Nginx转Apache)提供HTTPS的,再加上下面两行 $conf['reverse_proxy'] = TRUE; $conf['reverse_proxy_addresses'] = array($_SERVER['REMOTE_ADDR']);
添加后重新测试批量任务,看是否还会出现中断。
2. 检查Web服务器的HTTPS超时设置
HTTPS连接通常会有单独的超时配置,很可能你的服务器给HTTPS设置的超时时间刚好是30分钟,到点就主动断开了连接:
- 如果你用的是Apache:检查
httpd.conf或虚拟主机配置中的Timeout和SSLSessionTimeout参数,建议把Timeout调整到600秒(10分钟)以上,SSLSessionTimeout设置成3600秒(1小时)左右。 - 如果你用的是Nginx:检查
nginx.conf或站点配置中的proxy_read_timeout、ssl_session_timeout,同样把超时时间调整到足够覆盖你的批量任务时长。
3. 排查服务器进程回收机制
服务器日志里的“internal dummy connexion”是Web服务器(比如Apache)自己发起的测试连接,用来检测子进程是否存活。如果这个日志刚好在AJAX中断的时间点出现,可能是服务器进程被强制回收了:
- 比如Apache的
MaxRequestsPerChild参数,如果设置过小,进程处理一定数量的请求后就会重启,刚好中断你的长时批量任务。可以把这个参数调大(比如设置为10000)或者直接设为0(不限制进程的请求处理数量)。
4. 检查防火墙/负载均衡的超时设置
如果你的服务器前端有防火墙或者负载均衡设备,这些设备可能会对HTTPS连接设置更严格的超时规则,哪怕Web服务器设置了更长时间,中间设备也会提前断开连接。可以联系运维人员查看这些设备的日志,确认是否有连接超时的记录,并调整超时时间。
5. 验证SSL证书与加密套件的完整性
虽然你提到证书有效期到2020年,但还要确认证书是否包含完整的中间证书链——有些浏览器会因为缺少中间证书导致连接不稳定,进而出现重置。另外,也可以尝试调整服务器的SSL加密套件配置,优先使用TLS 1.2及以上的现代加密套件,避免老旧套件带来的长连接稳定性问题。
三、总结
这个问题的核心是HTTPS环境下的连接超时或识别异常,建议按照「Drupal配置→Web服务器超时→进程回收→中间设备→SSL证书」的顺序逐步排查,应该能找到根源。
内容的提问来源于stack exchange,提问作者etudiant

