내가 함께 시작하는 것이, FastCGI를 래퍼로 this script와의 nginx를 사용하고 있습니다 : 이제nginx에서 FastCGI wrapper로 Perl을 실행할 때 실제로 속도를 얻을 수 있습니까?
spawn-fcgi -F 3 -u www-data -s /var/run/perl-fcgi.sock -P /var/run/perl-fcgi.pid -- ./perl-fcgi.pl
, 나는 간단한 스크립트가 있다고 가정
#!/usr/bin/perl
print "Content-type: text/plain\r\n\r\n";
print "hello\n";
스크립트는 잘 실행, 난을 참조하십시오 "hello"/text.pl을 요청할 때. 그러나 FastCGI 래퍼의 줄 106에서 볼 수 있듯이 스크립트는 exec()로 실행되기 때문에 기본적으로 자체 Perl 환경에서 실행됩니다. FastCGI의 전체 개념을 망칠 필요가 없습니까? 이미 초기화 된 스크립트가 없지만 독립적으로 호출 할 수 있습니까?
nginx에서 FastCGI를 통해 상호 작용하는 기본 방법은 무엇입니까?
건배, --polemon
PS : spawn-fcgi이 FCGI 래퍼를 시작하고 소켓에 바인드 lighttpd를에서 프로그램입니다.
문제는 Perl을 nginx의 다른 스크립팅 언어로 사용하고 싶습니다. 루아와 PHP를위한 후크가 있습니다. 둘 다 FastCGI로 실행됩니다. 래퍼를 실행할 때 다른 모든 Perl 스크립트를 실행하면 좋아하는 Perl 응용 프로그램을 호출 할 수 없으므로 모든 Perl 스크립트를 자체 소켓으로 연결해야합니다. 이는 바람직하지 않습니다. 대안이 있습니까? – polemon
@polemon, 오른쪽. FCGI 브로커 또는 프로세스 관리자가 필요합니다. 하나는 개별 스크립트를 장기 실행 (FCGI) 데몬으로 돌리거나 자체 FCGI 인터프리터이며 독립 실행 형 펄 스크립트를 서브 루틴으로 동적으로 컴파일하여 응답 할 수 있습니다 요청. – pilcrow
@polemon 많은 펄 CGI 프로그램이 프로세스마다 두 번 이상 실행되도록 설계되지 않았다는 점에서 문제가 있습니다. 일반적으로 끝까지 버려지기 때문에 글로벌 데이터로 빠르게 재생됩니다. FCGI 루프에 넣으면 이상한 버그가 발생할 수 있습니다. CGI 응용 프로그램을 실행하고 실행하기 전에 Moose와 같은 일반적이며 값 비싼 모듈을 미리로드하는 FCGI 랩퍼를 작성하여 두통없이 성능을 스스로 구입할 수 있습니다. 이것은 시작 시간을 줄여 주는데, 이는 바닐라 CGI를 사용하는 데 드는 많은 비용입니다. – Schwern