4

我正在尝试让 C::A 应用程序在 nginx fastcgi 环境(debian 6.0)中工作并使用 spawn-fcgi。

C::A 路由配置使用$self->mode_param( path_info=> 1, param => 'rm' );

问题是无论我请求什么 C::A 应用程序网址(等),它总是显示主页,这就是它example.com/cities所做的。example.com/profile/99example.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。

你有什么想法?

4

2 回答 2

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。

参考:

于 2012-08-02T14:44:48.017 回答
1

我最终在我的 C::A 应用程序中解决了这个问题。我在这里记录它。

所以我没有设法让 nginxPATH_INFO向下传递给我的 C::A 应用程序。为了解决这个问题,我在我的 C::A 应用程序中设置了PATH_INFO的值,REQUEST_URI以便它选择正确的运行模式。

此外,nginx 也没有通过QUERY_STRING,所以我必须附加$query_string到 catch all 路线才能向下传递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;
    }

}
于 2012-08-05T04:27:10.493 回答