2016-07-01 9 views
0

Apache 서버가 설치된 Windows Server 2008 R2 Enterprise가 실행 중입니다. mod_perl & mod_ssl 아파치 2 :: ModSSL을 설치했는데 cpan을 사용할 수 없었고 nmake를 사용하여 컴파일해야했습니다. CPAN이이 서버에서 올바르게 작동하지 않아이를 변경할 수 없습니다. https를 통해 호출 된 perl 스크립트는 나중에 클라이언트가 인증에 사용했던 인증서에 액세스 할 수 있어야합니다. 그 이유는 Apache2 :: ModSSL을 사용하여 SSL 변수에 액세스하려고합니다. 내가'C : /Apache/Perl/site/lib/auto/Apache2/ModSSL/ModSSL.dll'을로드 할 수 없습니다.

use Apache2::ModSSL; 

을 구현 한 후 내 테스트 스크립트를 ACESS 할 때

는 내가 서버에서 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 정확한이 경로에 저장됩니다. 나는 또한 파일 액세스를 확인하고 모든 사용자, 시스템, 관리자 등에게 완전한 액세스 권한을 부여했습니다. 아파치는 여러 번 재시작되었지만 아무 것도 변경하지 않았습니다. 내가 cmd를 그것을 실행하려고 할 때 는 분명히 확인 할 연결이 없었다하지만 난 문제없이

use Apache2::ModSSL; 
print Apache2::ModSSL->VERSION; 

를 실행할 수 있습니다. Apache에서 모듈을로드 할 때 발생하는 문제를 해결하는 방법은 무엇입니까?

서버 추가 정보 상태

이 함께 mod_perl을-2.0.1, mod_ssl을/OpenSSL을 (0.9.7g)과, 펄 5.8.7의 Win32 및 아파치 2.0.54을위한 바이너리 배포판이며, php-4.3.11, 모두 VC++ 6.0 (SP5)으로 제작되었습니다.

cl -version 상태

마이크로 소프트 (R) 32 비트 C/C++ 최적화 컴파일러 버전 15.00.30729.01에 대한 80X86

nmake -version 상태

마이크로 소프트 (R) 프로그램 유지 관리 유틸리티 버전 9.00.30729.01

+0

'perl'및 XS 모듈은 동일한 컴파일러로 컴파일해야합니다. –

+0

readme 파일에서 알 수 있듯이 Apache Server 및 Perl은 VC++ 6.0 (SP5)을 사용하여 빌드되었습니다. 그래서 nmake는 같은 컴파일러 여야합니까, 아니면 내가 잘못 했습니까? – chenino

+0

글쎄, 그 컴파일러가 설치되어 있습니까? 어떤 nmake가 호출되는지 확인 했습니까? 'cl'은 버전 번호로 무엇을 제공합니까? 귀하는 이러한 사실을 알 수있는 유일한 사람이므로 귀하의 질문을 정보로 업데이트하십시오. –

답변

2

너무 깊게 조사하지 않으면 perl, OpenSSL, mod_sslApache::ModSSL을 빌드하는 데 사용했던 컴파일러와 다른 컴파일러로 컴파일 된 것입니다.

mod_perl 아래에서 실행 중이라고 생각하면 모듈에서 XS 버전 만 시도합니다. 당신은 모듈의 Apache2/ModSSL.pm에서 볼 수 있습니다

XSLoader::load __PACKAGE__, $VERSION 
    if(exists $ENV{MOD_PERL} and $ENV{MOD_PERL}=~/mod_perl/); 

그것은 단지 MOD_PERL 환경 변수가 존재하는 경우 XS 구성 요소를로드하려고하며 mod_perl가 포함되어 있습니다. 내 생각 엔 당신이 그랬다면 :

 
C:\> set MOD_PERL=mod_perl 
C:\> perl -MApache2::ModSSL -e "print $Apache2::ModSSL::VERSION" 

당신은 문제가 발생할 것입니다.

또한 perlphp 이외의 OpenSSL 버전이 너무 오래되어서 안전하게 사용할 수 없다는 사실을 강조해야한다고 생각합니다.

+1

나의 답변이 늦어 져서 미안하다. 난 당신의 명령을 시도하고 더 differentntiated MSCVR90.dll가 누락되었습니다 오류 메시지가있어. 나는 그것을 경로에 통합하려고 시도하고 다시 시도 할 것입니다. 이것은 한 걸음 더 나아가므로 이미 도움이되었습니다. 내가이 일을 끝내면 대답을 표시 할 것입니다. – chenino