2012-08-02 5 views
4

nginx fastcgi 환경 (debian 6.0)에서 C : A 응용 프로그램 작업을 얻으려고하고 spawn-fcgi를 사용하려고합니다.CGI :: 응용 프로그램에 대한 nginx fastcgi 구성

C가 :: 라우트가 $self->mode_param(path_info=> 1, param => 'rm');

문제를 사용하여 구성되는 것은 그 어떤 C : A 앱의 URL을 (example.com/cities, example.com/profile/99 등) 내가 항상 example.com/index.pl가하는 일입니다 홈 페이지를 표시 요청하고있다.

내의 nginx 설정이

server { 
    listen 80; 
    server_name example.com; 
    root /var/www/example.com/htdocs; 
    index index.pl index.html; 

    location/{ 
     try_files $uri $uri/ /index.pl; 
    } 

    location ~ .*\.pl$ { 
      include fastcgi_params; # this is the stock fastcgi_params file supplied in debian 6.0 
      fastcgi_index index.pl; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param PERL5LIB "/var/www/example.com/lib"; 
      fastcgi_param CGIAPP_CONFIG_FILE "/var/www/example.com/conf/my.conf"; 
      fastcgi_pass unix:/var/run/fcgiwrap.socket; 
    } 

} 

입니다 I 유사한 방식으로 성공적으로 설치 약간의 PHP 애플 리케이션을 가지고있다.

이 경우, 그러나 나는 그것이 필수적인 fastcgi_param을 C :: A로 전달하지 않는다고 생각합니다.

귀하의 의견은 무엇입니까?

답변

1

나는 내 C :: A 앱의 문제를 해결하기 위해 문제를 해결했다. 그리고 나는 그것을 여기에 문서화하고있다.

그래서 나는 내 C :: A 애플 PATH_INFO 함께 nginx 패스를 관리하지 않았다. 이 문제를 해결하기 위해 REQUEST_URI 값을 내 C :: A 응용 프로그램에서 PATH_INFO으로 설정하여 올바른 runmode를 선택합니다.

또한 nginx는 QUERY_STRING을 전달하지 않으므로 을 전달하기 위해 모든 경로의 캐치에 $query_string을 추가해야했습니다.

내의 nginx의 설정은 다음과 같이 끝 : 답장을

server { 
    listen 80; 
    server_name example.com; 
    root /var/www/example.com/htdocs; 
    index index.pl index.html; 

    location/{ 
     try_files $uri $uri/ /index.pl?$query_string; 
    } 

    location ~ .*\.pl$ { 
      include fastcgi_params; # this is the stock fastcgi_params file supplied in debian 6.0 
      fastcgi_index index.pl; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param PERL5LIB "/var/www/example.com/lib"; 
      fastcgi_param CGIAPP_CONFIG_FILE "/var/www/example.com/conf/my.conf"; 
      fastcgi_pass unix:/var/run/fcgiwrap.socket; 
    } 

} 
2

저는 CGI :: Application을 유지 관리하고 Nginx도 사용합니다. 나는 똑같은 일을하지 않았지만 이것을 시도 할 것입니다 :

fastcgi_split_path_info ^(/index.pl)(.*)$; 
fastcgi_param PATH_INFO $fastcgi_path_info; 
fastcgi_param SCRIPT_NAME $fastcgi_script_name; 

이것은 필요한 PATH_INFO를 포착하여 전달하기로되어 있습니다.

참고 문헌 :

+0

감사합니다. 하지만 500 내부 오류 및 재귀 적으로 "/index.pl/index.pl/cities"nginx 오류 로그에 대한 디버그 켜져있는 것처럼 리디렉션 무리가 점점. – perlwle

+0

저의 원래 생각을 시도해 주셔서 감사합니다. 나는 완전히 다른 제안으로 질문을 수정했다. –

+0

나는 올바른 길에 있다고 생각합니다. 그러나, 어떤 이유로 path_info 부분은 nginx에서 내 응용 프로그램으로 전달되지 않는 것 같습니다. 나는 수동으로 path_info를 다른 것으로 설정했지만 여전히 C :: A 응용 프로그램에 나타나지 않습니다. – perlwle

관련 문제