5

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

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

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 是一个例外,因为除了默认的 Plack::Handler 之外,我们没有特定的 FCGI 守护进程。我们有一个计划将 FCGI 从 Plack 核心中分离出来并单独安装。”

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

4

1 回答 1

1

mod_fastcgi如果你坚持使用 FastCGI 协议,你可以使用和指令Apache 连接到外部的 FastCGI 服务器FastCgiExternalServer(注意mod_fcgid不支持这种操作模式)。这应该适用于 Plack 内置的 FCGI 处理程序。

但正如 Tatsuhiko 所说,建议使用像 Starman 或 Starlet 这样的服务器,作为 HTTP 上的反向代理。所以你会mod_proxy在 Apache 端使用。使用 Apache 2.4.7,还可以通过 Unix 域套接字进行通信

于 2015-03-22T20:16:25.580 回答