0

我在使用 nginx 和 fastcgi 部署 Catalyst 应用程序时遇到问题。我试图在 ubuntu 12.04 下这样做。

我已成功配置 nginx 以从我的应用程序的 /root 子目录中提供静态内容。但是,当我尝试访问我的任何动态 url 时,我在应用程序的错误日志中收到 404 错误,提示找不到(未映射的)url,这让我相信 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 包装器。我编辑 fcgiwrap 以使用 TCP 套接字 (127.0.0.1:3003),然后阻止我同时运行 /etc/init.d/fcgiwrap 和 script/budgetweb_fastcgi.pl,因为它们都使用相同的套接字。所以我猜我应该只使用 Catalyst 脚本?此外,在运行 fcgiwrap 时,我在尝试访问静态内容时收到 502“错误网关”错误。

任何帮助或帮助指针,将不胜感激。到目前为止,我已经查看了以下页面(其中包括;StackOverflow 只允许我发布两个链接):

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' 标志来守护它。)

在您的网络服务器配置中,将“/”配置为指向您的应用程序应该没问题。您可以尝试删除“index”、“try_files”和“fastcgi_index”配置行,这可能会导致 nginx 尝试静态提供内容,而不是将请求传递给您的应用程序。

于 2012-12-28T15:44:01.497 回答