Perl CGI::Application app的nginx fastcgi配置
我正在尝试让C::a应用程序在nginx fastcgi环境(debian 6.0)中工作,并使用spawn fcgi C::使用Perl CGI::Application app的nginx fastcgi配置,perl,nginx,cgi-application,Perl,Nginx,Cgi Application,我正在尝试让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
$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应用程序
但是,在本例中,我怀疑我没有将essentialfastcgi_param
传递给它所需要的C::A
您的想法是什么?我维护CGI::Application,并使用Nginx。我没有做过同样的事情,但我会尝试:
fastcgi_split_path_info ^(/index.pl)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
这将捕获并转发您需要的路径信息
参考资料:
- 这不是针对CGI::App的,但我认为它足够近,可以提供帮助
我最终通过C::a应用程序中的一个变通方法解决了这个问题。我在这里记录
因此,我没有让nginx沿着路径\u INFO
向下传递到我的C::A应用程序。为了解决这个问题,我在我的C::A应用程序中使用REQUEST\u URI
的值设置了PATH\u INFO
,以便它选择正确的运行模式
此外,nginx也没有传递QUERY\u STRING
,因此我必须将$QUERY\u STRING
附加到catch-all路由,以便向下传递QUERY\u 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;
}
}
谢谢你的回复。但是我得到了500个内部错误和一堆递归重定向,比如“/index.pl/index.pl/cities”,并且为nginx错误日志打开了调试。感谢您尝试我的原始想法。我现在用一个完全不同的建议修改了这个问题。我认为这是正确的。但是,由于某些原因,路径信息部分似乎没有从nginx传递到我的应用程序。我已经手动将路径信息设置为其他内容,但仍然没有看到它显示在C::A应用程序中。目前,我正在使用请求uri手动设置路径信息,作为解决方法…我认为问题在于拆分路径信息正则表达式可能错了,因为“/index.pl”不在请求uri中,然后就是:fastcgi\u split\u path\u info^()(*)代码>。。。但是,我认为这相当于您将$request\u uri作为PATH\u INFO传递的想法。那么,你现在能用了吗?