Конфигурация 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, который вам нужен.

Рекомендации:

Другие вопросы по тегам