我正在运行Windows Server 2008 R2 Enterprise,并且安装了Apache Server,并且安装了mod_perl和mod_ssl
我刚刚安装了Apache2 :: ModSSL,但是我无法为此使用cpan,而不得不使用nmake对其进行编译。 CPAN在此服务器上无法正常工作,我无法更改此设置。
通过https调用的perl脚本以后应该可以访问客户端用来进行身份验证的证书,这就是为什么我要使用Apache2 :: ModSSL来访问SSL变量的原因。
当我尝试实现后访问我的测试脚本
use Apache2::ModSSL;
我从服务器收到HTTP500错误。
服务器错误日志状态
[Fri Jul 01 15:01:58 2016] [error] [client 10.217.139.184] failed to resolve handler `ssl::hello': Can't load 'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll' for module Apache2::ModSSL: load_file:The specified module could not be found at C:/Apache/Perl/lib/XSLoader.pm line 68.\n at C:/Apache/Perl/site/lib/Apache2/ModSSL.pm line 8\nCompilation failed in require at ssl/hello.pm line 7.\nBEGIN failed--compilation aborted at ssl/hello.pm line 7.\nCompilation failed in require at (eval 3) line 3.\n
当我检查文件位置时,ModSSL.dll存储在此路径的确切位置。我还检查了文件Access,并向所有用户,系统,管理员等授予了完全访问权限。Apache已多次重新启动,并且没有任何更改。
当我尝试在cmd中执行它时,显然没有要检查的连接,但是我可以执行
use Apache2::ModSSL;
print Apache2::ModSSL->VERSION;
没有什么问题。
如何在Apache中加载模块来解决问题?
服务器自述状态
这是Perl 5.8.7和Apache的Win32的二进制发行版
2.0.54,以及mod_perl-2.0.1,mod_ssl / OpenSSL(0.9.7g)和php-4.3.11,均使用VC ++ 6.0(SP5)构建。
cl -version
状态适用于80x86的Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01
nmake -version
状态Microsoft(R)程序维护实用程序版本9.00.30729.01
最佳答案
无需深入研究,问题的最可能原因是perl
,OpenSSL,mod_ssl
等使用与用于构建Apache::ModSSL的编译器不同的编译器进行编译。
在我看来,该模块仅在认为它在mod_perl
下运行时才尝试XS版本。您可以在模块的Apache2/ModSSL.pm中看到它:
XSLoader::load __PACKAGE__, $VERSION
if( exists $ENV{MOD_PERL} and $ENV{MOD_PERL}=~/mod_perl/ );
仅当
MOD_PERL
环境变量存在并且包含mod_perl
时,它才尝试加载XS组件。我的猜测是您是否这样做:C:\>设置MOD_PERL = mod_perl
C:\> perl -MApache2 :: ModSSL -e“打印$ Apache2 :: ModSSL :: VERSION”
你会遇到问题。
另外,我觉得我必须强调一个事实,除了
perl
和php
之外,您的OpenSSL版本似乎太旧了,无法安全使用。关于apache - 无法加载'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38146408/