我正在尝试在新的 Linux 环境中设置并运行一个旧的 Web 应用程序(编写于 2010 年)。Apache 服务器由于Unknown Authz provider access
以下配置导致的错误而无法启动。
<Directory /srv/webapp>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
SetOutputFilter DEFLATE
ExpiresActive On
ExpiresDefault "3 Months"
AuthType security::AuthCookieHandler
AuthName Maxio
PerlAuthenHandler security::AuthCookieHandler->authenticate
PerlAuthzHandler security::AuthCookieHandler->authorize
require access
</Directory>
我找不到任何关于此的文档,或者任何定义 的 Apache 模块access
,但是security::AuthCookieHandler
有
sub access
{
...
...
}
我知道这是mod_perl
基于身份验证的,但之前没有做过这方面的工作。如果禁用此身份验证,Apache 将启动,并且应用程序将在浏览器中加载。
所以问题是
- 应该
require access
从中获取返回值吗sub access
? - 如果是的话,为什么
sub access
配置不可见? - 如果不是这样,
access
这里是什么?
答案1
经过几个小时的研究,我发现这是由于 Apache 和 mod_perl 的最新版本的变化造成的。
从以下文档中,
https://metacpan.org/release/Apache-AuthCookie https://metacpan.org/pod/distribution/Apache-AuthCookie/README.apache-2.4.pod
我知道 Apache 2.4 需要 mod_perl 2.0.9 或更高版本。
还必须使用以下方式添加自定义 Authz 提供程序PerlAddAuthzProvider
所以我可以通过写作来解决这个问题
PerlAddAuthzProvider access security::AuthCookieHandler->access
...
...
<Directory /srv/webapp>
...
...
require access
</Directory>