我在装有 apache2 和 mod_perl2 的 RedHat 6.5 上使用 OTRS。我的一台服务器(沙盒环境)有以下情况(yum 信息反馈):
Installed Packages
Name : httpd
Arch : x86_64
Version : 2.2.15
Release : 39.el6
Name : mod_perl
Arch : x86_64
Version : 2.0.4
Release : 11.el6_5
我们注意到开发服务器的性能存在差异。因此,我将以下脚本放在与 index.pl 相同的目录中,以查看是否正在使用 mod_perl:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Server's environment\n";
foreach ( keys %ENV ) {
print "$_\t$ENV{$_}\n";
}
与 Dev 相比,Sandbox 在输出的“环境”部分缺少两行:
MOD_PERL_API_版本 2
MOD_PERL mod_perl/2.0.4
因此我很确定 mod_perl 没有被使用。但据我所知,一切都已配置:
1)/etc/httpd/conf.d/perl.conf 包含以下行:LoadModule perl_module modules/mod_perl.so
2)/etc/httpd/conf/httpd.conf 包含一个包含:包含 conf.d/*.conf
3)这是 OTRS 的默认 .conf,但我找不到错误:
# Setup environment and preload modules
Perlrequire /opt/otrs/scripts/apache2-perl-startup.pl
# Reload Perl modules when changed on disk
PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
# general mod_perl2 options
<Location /otrs>
# ErrorDocument 403 /otrs/customer.pl
ErrorDocument 403 /otrs/index.pl
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
PerlOptions +SetupEnv
<IfModule mod_version.c>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
</IfModule>
<IfModule !mod_version.c>
Order allow,deny
Allow from all
</IfModule>
</Location>
# mod_perl2 options for GenericInterface
<Location /otrs/nph-genericinterface.pl>
PerlOptions -ParseHeaders
</Location>
</IfModule>
但模块已经加载:
[user@server httpd]$ httpd -M | grep perl
Syntax OK
perl_module (shared)
[user@server httpd]$ httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
谁能发现错误或有其他步骤来排除为什么无法使用 mod_perl?
答案1
因此,如果有人在谷歌搜索后最终来到这里:它与默认的 zzz_otrs.conf 中的第 16 行有关:
<IfModule mod_version.c>
作为测试我将其更改为
<IfModule core.c>
然后一切都按预期运行。这显然是一种肮脏的解决方法,如果 mod_perl 安装不正确,这将导致 apache 崩溃。如果我找到比这更好(更通用)的解决方案,我会更新。