0

nginx と fastcgi を使用して Catalyst アプリケーションを展開する際に問題があります。ubuntu 12.04でこれをやろうとしています。

アプリの /root サブディレクトリから静的コンテンツを提供するように nginx を正常に構成しました。ただし、動的 ​​URL のいずれかにアクセスしようとすると、アプリケーションのエラー ログに (マップされていない) URL が見つからないという 404 エラーが表示され、nginx が静的ページに似た要求を処理しようとしていると思われます。 Catalyst アプリに送信する代わりに。

言い換えると、「localhost:3001/root/static.html」をクリックすると静的コンテンツがブラウザに正常に表示されますが、「localhost:30001/expense/editor」をクリックすると次のエラーが発生します。

"GET /expense/editor HTTP/1.1" 404

(「/expense/editor」はアプリ内のパスであり、組み込みの Catalyst 開発サーバーを実行しているときに正常にアクセスできます)。

Catalyst アプリを次のように起動しています。

> perl script/budgetweb_fastcgi.pl -l localhost:3003

/etc/init.d/fcgiwarp も実行してみました。別の fastcgi ラッパーを実行する必要があるのか​​、それとも上記の perl スクリプト私の fastcgi ラッパーなのかは不明です。TCP ソケット (127.0.0.1:3003) を使用するように fcgiwrap を編集しました。これにより、/etc/init.d/fcgiwrap と script/budgetweb_fastcgi.pl の両方が同じソケットを使用するため、同時に実行できなくなりました。では、Catalyst スクリプトのみを使用することになっていると思いますか? また、fcgiwrap を実行しているときに、静的コンテンツにアクセスしようとすると、502 の「不正なゲートウェイ」エラーが発生します。

ヘルプ、またはヘルプへのポインタは、非常に高く評価されます。これまでのところ、次のページを見てきました (とりわけ、StackOverflow では 2 つのリンクしか投稿できません)。

Catalyst wiki
HOWTO: FastCGI と nginx を使用して Catalyst アプリケーションをデプロイする

サーバー用の私のnginx構成ファイルは次のとおりです。

server {
       listen       3001;
       server_name  budgetweb.com;
       root     /local/www/money/budgetweb;

       location /root {
           add_header Cache-control public;
       root /local/www/money/budgetweb/;
       }

       location / {
          access_log    /local/www/money/budgetweb/logs/access.log;
          error_log /local/www/money/budgetweb/logs/error.log;
          index  index.html index.htm index.pl;
      try_files $uri =404;
      gzip off;

      fastcgi_pass  localhost:3003;
          fastcgi_index index.pl;

          include /etc/nginx/fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME  /local/www/money/budgetweb$fastcgi_script_name;
      fastcgi_param  SCRIPT_NAME /;
      fastcgi_param  PATH_INFO $fastcgi_script_name;
        } 

       # Disable gzip (it makes scripts feel slower since they have to complete
       # before getting gzipped)
       gzip off;

#       include         /etc/nginx/fcgiwrap.conf;
}
4

1 に答える 1

0

Catalystに含まれているfastcgi.plスクリプトは、FastCGIラッパーです。あなたがしなければならないのは、ソケットでそれを開始し、次にあなたのウェブサーバーをそのソケットに向けるだけで、すべてが通過するはずです。本番システムで実行したいのは、起動時とシャットダウン時にアプリケーションを開始および停止する開始/停止スクリプトを作成することだけです。startコマンドは、上記で実行したものとほとんど同じようになります(デーモン化するには、「-d」フラグを追加することをお勧めします)。

Webサーバーの構成では、アプリケーションを指すように「/」を構成しても問題ありません。'index'、'try_files'、および'fastcgi_index'構成行を削除しようとすると、nginxがリクエストをアプリケーションに渡す代わりに、コンテンツを静的に提供しようとする可能性があります。

于 2012-12-28T15:44:01.497 に答える