我目前正在使用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应用程序的最佳方法是什么?
答案 0 :(得分:1)
如果您坚持使用FastCGI协议,则可以使用mod_fastcgi
和FastCgiExternalServer
指令将Apache连接到外部FastCGI服务器(请注意mod_fcgid
不< / em>支持这种操作模式)。这应该适用于Plack内置的FCGI处理程序。
但正如Tatsuhiko所说,建议使用像Starman或Starlet这样的服务器作为HTTP上的反向代理。所以你会在Apache端使用mod_proxy
。使用Apache 2.4.7,也可以communicate over Unix domain sockets。