Configuration de nginx fastcgi pour l’application CGI :: Application

J’essaie d’obtenir une application C :: A qui fonctionne dans l’environnement nginx fastcgi (debian 6.0) et en utilisant spawn-fcgi.

C :: Une route est configurée avec $self->mode_param( path_info=> 1, param => 'rm' );

le problème est que quelles que soient les url des applications C :: A ( example.com/cities , example.com/profile/99 etc) que je demande, elles affichent toujours la page d’accueil, comme le fait example.com/index.pl .

ma configuration nginx est

 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; } } 

J’ai réussi à installer quelques applications php de la même manière.

dans ce cas, cependant, je soupçonne que je ne transmets pas l’essentiel de fastcgi_param à C :: A qui est requirejs par elle.

quelles sont vos pensées?

Je gère CGI :: Application et utilise également Nginx. Je n’ai pas fait la même chose, mais j’essaierais ceci:

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

Ceci est censé capturer et transmettre le PATH_INFO dont vous avez besoin.

Les références:

  • Documents officiels de Nginx FastCGI
  • Article de blog associé avec exemple Ce n’est pas pour CGI :: App, mais je pense que c’est assez proche pour être utile.

J’ai fini par résoudre le problème avec une solution de contournement dans mon application C :: A. Et je le documente ici.

Donc, je n’ai pas réussi à faire en sorte que nginx transmette PATH_INFO à mon application C :: A. Pour contourner ce PATH_INFO , j’ai défini le PATH_INFO avec la valeur de REQUEST_URI dans mon application C :: A afin qu’il récupère le bon mode d’exécution.

De plus, nginx ne passe pas non plus de QUERY_STRING , j’ai donc dû append $query_ssortingng à la route catch all afin de transmettre également QUERY_STRING .

mon nginx config se termine comme ceci:

 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_ssortingng; } 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; } }