使用FastCGI在Apache之外运行Plack PSGI Perl应用程序的最佳方法?

时间:2014-05-31 09:40:38

标签: apache perl fastcgi plack psgi

我目前正在使用Plack :: Handler :: Apache2调用的PSGI应用程序运行Apache / mod_perl。我们遇到的问题是每个Apache进程都消耗与PostgreSQL数据库的连接,这很昂贵。为了解决这个问题,我们计划将PSGI应用程序与Apache分开运行,并让所有Apache进程通过UNIX域套接字与之通信。在我的案例中你会推荐什么设置?

我的计划是使用plackup运行它:

plackup -s FCGI -E production --nproc 100 --daemonize --listen /tmp/myapp.sock \
/usr/local/bin/myapp.psgi

我问Plack的作者,Tatsuhiko Miyagawa,如果将plackup -s FCGI推荐用于生产目的。他提供了以下答案:

  

"虽然它可以用于制作,但我通常建议使用其他   专业服务器,如Starman,Starlet或uwsgi。 FCGI是一个   例外,因为除了。之外我们没有特定的FCGI守护进程   默认Plack :: Handler。我们计划将FCGI从Plack中分离出来   核心,并使其成为一个单独的安装。"

现在,直到FCGI被分离出Plack,问题是,在Apache之外使用FastCGI运行PSGI应用程序的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您坚持使用FastCGI协议,则可以使用mod_fastcgiFastCgiExternalServer指令将Apache连接到外部FastCGI服务器(请注意mod_fcgid 不< / em>支持这种操作模式)。这应该适用于Plack内置的FCGI处理程序。

但正如Tatsuhiko所说,建议使用像Starman或Starlet这样的服务器作为HTTP上的反向代理。所以你会在Apache端使用mod_proxy。使用Apache 2.4.7,也可以communicate over Unix domain sockets