Perl CGI::Application app的nginx fastcgi配置

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

我正在尝试让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应用程序

但是,在本例中,我怀疑我没有将essential
fastcgi_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传递的想法。那么,你现在能用了吗?