【发布时间】:2019-12-13 06:03:13
【问题描述】:
我正在使用相同的 HTTPd 实例托管不同版本的同一 Web 应用程序的多个实例,并且当前每个 Web 应用程序的实例/版本有一个 VHOST。我想使用 mod_perl 的 PostConfigRequire 来实现一个处理程序,在服务器启动期间预加载所有这些实例,而不是像目前所做的那样依赖于每个请求的 mod_perl 的注册表设施。后者breaks 在并发请求过多的情况下,并且根据一些测试,如果事情被预加载,则不会再出现该问题。
由于我的 Web 应用程序版本不同,我需要使用 PerlOptions +Parent 为每个 VHOST 提供其单独的 Perl 解释器池。此外,我可以根据VHOST 轻松配置PerlPostConfigRequire,但预加载需要考虑当前在哪个VHOST 中执行该处理程序。在该处理程序中,我只需要加载与某些具体VHOST 关联的那些文件.
问题是我无法找到当前正在执行该处理程序的VHOST。在过去,我通过查看当前请求的 URL 并将其与 VHOST 配置进行比较,为每个请求实现了类似的功能,但我现在没有请求。 Apache2::ServerUtil->server() 没有提供我的VHOST,但它完全可用,例如使用Apache2::Directive::conftree()->lookup('VirtualHost')。只是我不知道哪个是当前执行的包含PerlPostConfigRequire 的那个。我很确定PerlPostConfigRequire 确实会按照VHOST 执行,因为我还可以使用配置的VHOSTs 的数量来调试输出缩放。
有什么想法吗?谢谢!
【问题讨论】: