【问题标题】:Best way to run a Plack PSGI Perl application outside of Apache using FastCGI?使用 FastCGI 在 Apache 之外运行 Plack PSGI Perl 应用程序的最佳方式?
【发布时间】:2014-07-21 00:50:45
【问题描述】:

我目前正在使用 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 守护进程,除了 默认的 Plak::Handler。我们计划从 Plack 中分离出 FCGI 核心并将其单独安装。”

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

【问题讨论】:

  • 我会考虑在 Perl 的 IRC 频道中发布这个问题。它们可能比您想象的更有帮助。 :) 祝你好运。
  • 您是否有理由要使用 FCGI 而不是运行单独的 Plack 网络服务器并使用 Apache 的 ProxyPass?

标签: apache perl fastcgi plack psgi


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多