无法加载 'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll'
Can't load 'C:/Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll'
我是 运行 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 就存储在这个路径中。我还检查了文件访问权限,并向所有用户、系统、管理员等授予了完全访问权限。Apache 重新启动了多次,但它没有改变任何东西。
当我尝试在 cmd 中执行它时,显然没有要检查的连接,但我可以执行
use Apache2::ModSSL;
print Apache2::ModSSL->VERSION;
没有问题。
如何解决在 Apache 中加载模块的问题?
服务器自述文件状态
This is a binary distribution for Win32 of Perl 5.8.7 and Apache
2.0.54, together with mod_perl-2.0.1, mod_ssl / OpenSSL (0.9.7g), and php-4.3.11, all built with VC++ 6.0 (SP5).
cl -version
州
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
nmake -version
州
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
无需深入调查,您的问题最可能的原因是 perl
、OpenSSL、mod_ssl
等使用与您用于构建 [=19= 的编译器不同的编译器编译].
在我看来,如果模块认为它是 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:\> set MOD_PERL=mod_perl
C:\> perl -MApache2::ModSSL -e "print $Apache2::ModSSL::VERSION"
你会遇到问题。
此外,我觉得我必须强调一个事实,即您的 OpenSSL 版本以及 perl
和 php
似乎太旧,无法安全使用。
我是 运行 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 就存储在这个路径中。我还检查了文件访问权限,并向所有用户、系统、管理员等授予了完全访问权限。Apache 重新启动了多次,但它没有改变任何东西。 当我尝试在 cmd 中执行它时,显然没有要检查的连接,但我可以执行
use Apache2::ModSSL;
print Apache2::ModSSL->VERSION;
没有问题。 如何解决在 Apache 中加载模块的问题?
服务器自述文件状态
This is a binary distribution for Win32 of Perl 5.8.7 and Apache 2.0.54, together with mod_perl-2.0.1, mod_ssl / OpenSSL (0.9.7g), and php-4.3.11, all built with VC++ 6.0 (SP5).
cl -version
州
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
nmake -version
州
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
无需深入调查,您的问题最可能的原因是 perl
、OpenSSL、mod_ssl
等使用与您用于构建 [=19= 的编译器不同的编译器编译].
在我看来,如果模块认为它是 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:\> set MOD_PERL=mod_perl C:\> perl -MApache2::ModSSL -e "print $Apache2::ModSSL::VERSION"
你会遇到问题。
此外,我觉得我必须强调一个事实,即您的 OpenSSL 版本以及 perl
和 php
似乎太旧,无法安全使用。