Конфигурация nginx fastcgi для CGI:: Приложение
Я пытаюсь заставить приложение C::A работать в среде nginx fastcgi (debian 6.0) и использую spawn-fcgi.
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;
}
}
Я успешно настроил несколько php-приложений аналогичным образом.
в этом случае, однако, я подозреваю, что я не пропускаю fastcgi_param
вплоть до C::A, который требуется для него.
что ты думаешь?
2 ответа
Я решил проблему с помощью обходного пути в своем приложении C::A. И я документирую это здесь.
Так что мне не удалось передать nginx PATH_INFO
вплоть до моего приложения C::A. Чтобы обойти это, я установил PATH_INFO
со значением REQUEST_URI
в моем приложении C::A, так что он выбирает правильный режим выполнения.
Кроме того, nginx не проходит QUERY_STRING
либо я должен был добавить $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;
}
}
Я поддерживаю 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, который вам нужен.
Рекомендации:
- Официальные документы Nginx FastCGI
- Связанный пост в блоге с примером Это не для CGI::App, но я думаю, что это достаточно близко, чтобы быть полезным.