레거시 Perl 코드 및 Apache2.
-
21-12-2019 - |
문제
Perl 코드 톤으로 선사 시대 웹 사이트를 유지해야합니다. 새 서버로 이동 한 후에는 퍼지가 있습니다 :
동일한 클라이언트의 여러 요청이 페이지에서 실행되면 (GD를 사용한 이미지 생성)이 스크립트는 서로 변수를 덮어 씁니다. 이상한 결과가 발생합니다.
빠른 해결 방법으로 ipache에서 maxrequestsperchild= 1을 설정합니다. 그러나 이제는 사물이 크롤링으로 속도가 느려집니다 ...
요청을 분리하는 방법이 있습니까? 나를 도울 수있는 mod_perl 또는 apache 매개 변수
Apache :
Server version: Apache/2.2.15 (Unix)
Server built: Apr 3 2014 23:56:16
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
.
perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
.
이를위한 모든 솔루션은 매우 높이 평가됩니다.)
편집 : mod_perl로 물건을 수정하는 적절한 방법을 찾을 수는 없지만 다음 해결 방법은 다음과 같습니다.
- mod_perl 를 비활성화합니다
- 사용 mod_cgi 를 활성화합니다
- addHandler CGI-script .pl
- suexec 를 비활성화합니다
SueXec이 활성화되면 스크립트 헤더의 조기 종료를 주었기 때문에 마지막 사람이 필요했습니다.
해결책
아니요, "요청을 분리하는"할 수있는 일은 아무것도 없습니다. " 단일 Perl 인터프리터 프로세스에서 실행되는 모든 스크립트는 동일한 환경을 공유 할 것이고 환경이 지속적이지 않은 mod_perl에서 공유합니다. ModPerl::Registry
를 설정하여 자신의 서브 루틴에 포함 해야하는 (아직없는 경우 아직하지 않은 경우) 이름 공간 문제를 제거하지만 스크립트가 염두에 두어야합니다 (*). 'RE는 여전히 적어도 어느 정도까지 수정해야합니다.
http://perl.apache.org/docs/ 2.0 / 사용자 / 소개 / start_fast.html # Registry_Scripts
스크립트가 모든 모듈을 사용하여 공유되는 전역 상태가있는 SOAP :: Lite와 같은 특정 모듈과 같은 특정 모듈을 사용하는 경우,
그래서 아니요, 불행히도 스크립트가 변경하지 않고 스크립트가 괜찮을지 확인하기 위해 할 수있는 방법은 없습니다. 일부는 괜찮을지도 모르며, 다른 사람들은 그렇지 않을 것입니다. 별도의 mod_perl 서버 외에 정규 Apache CGI 서버를 설정하고 점차적으로이를 넘어서서 마이그레이션해야합니다. 일반 CGI 서버에서 성능을 얻지는 못하지만 문제가 없습니다.
(*) 특히, 이것은 많은 사람들의 기억으로부터, 많은 달 전에, 전역 변수를 설정하지 않아도 항상 my
를 사용하여 변수를 선언하고, CGI 모듈 (또는 mod_perl API)을 사용하여 요청 상호 작용 및 같은 것들을 사용해야합니다. 그.