在我们的设置中,我们有数千名用户使用 apache(httpd-2.2.3-65.el5_8,mod_ssl-2.2.3-65.el5_8)在运行 rhel 5.8 的 linux 服务器上运行。我们的用户使用 PKI 登录系统。服务器上有 5 个 CA。当我们使用 apache prefork 模型时,一切正常。但是,当我们切换到 worker 模型时,大多数请求都可以正常处理,但是我们在ssl_error_log
文件中遇到了很多错误,例如:
“[错误] 证书验证:错误 (20):无法获取本地颁发者证书”
如果我们使用单个 CA 运行工作模型,我们不会收到此错误。使用 prefork 模型时不会出现此错误。带有 worker 的 CA 捆绑不会发生这种情况ThreadsPerChild=1
。只有 worker ( ThreadsPerChild>1
) 与 ca 捆绑包而不是单个 CA 的组合会导致这种情况发生。
这是我们在 apache 配置文件中的 worker 配置:
<IfModule worker.c>
ServerLimit 250
StartServers 20
MaxClients 2050
MinSpareThreads 20
MaxSpareThreads 50
ThreadsPerChild 10
MaxRequestsPerChild 0
</IfModule>
并且 prefork 设置是:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 2048
MaxClients 2048
MaxRequestsPerChild 4000
</IfModule>
与使用 prefork 相比,使用 worker 运行多个 CA 是否存在已知问题,或者我们是否需要正确调整 worker 配置以获得所需的行为?