【问题标题】:How to control using Dancer 2 in a multiple deployment setting with Apache (not using plain CGI)?如何控制在 Apache 的多重部署设置中使用 Dancer 2(不使用普通 CGI)?
【发布时间】:2014-05-31 18:57:33
【问题描述】:

我们有一个使用普通 CGI 很长时间的 perl Web 应用程序,现在我们正在尝试使用其他东西(mod_perl、fastcgi、whathaveyou)移植到 Dancer 2,以便获得更高的性能。

这是我们现在的 Apache 设置(我知道 Starman 是强烈推荐的一种,但我们希望坚持使用 Apache 作为我们的 Web 服务器)

<VirtualHost *>
...
        <Directory "/opt/alDente/versions/DanceApp/public">
                AllowOverride None
                Options +ExecCGI -MultiViews FollowSymLinks
                Order allow,deny 
                Allow from all
                AddHandler cgi-script .cgi
        </Directory>

        ScriptAliasMatch /dance/(.*) /opt/alDente/versions/DanceApp/public/dispatch.cgi/$1
        ProxyPreserveHost On
        ProxyPass /test http://localhost:3000/
        ProxyPassReverse /test http://localhost:3000/
        ...

部署 Dancer 2 的普通 CGI 方法(如上所示)运行良好,即使在同一服务器下进行多个部署也是如此。问题:这样做会给我们带来性能提升。

我还尝试使用 Dancer 2 默认附带的 Simple Web 服务器,并让 Apache 指向它(如上所示)。它为我们带来了巨大的性能提升,简单且易于设置。问题:我们无法使用此设置设置多个部署,这对我们来说是绝对必须的。而且内部 URL 被代理搞砸了,除非我将 /test 更改为 /(即使我打开了 ProxyPreserveHost),但由于显而易见的原因,这不起作用具有多个部署。

我昨天也花了一整天的时间试图让 mod_perl 使用这个设置,但我读到 mod_perl 也无法处理同一服务器上的多个部署,也无法让它正常工作。

我也尝试使用 fastcgi 进行设置(使用 dispatch.fcgi 而不是 dancer 2 附带的 dispatch.cgi),但这似乎并没有带来任何性能提升。

我能做些什么来解决这个问题?使用 Apache 并在同一台服务器上处理多个部署(由于预算问题,我们的服务器必须托管生产、测试​​和 alpha 环境)对我们来说是必须

【问题讨论】:

    标签: apache perl fastcgi mod-perl dancer


    【解决方案1】:

    完全有可能使用 mod_proxy 在单个 Apache 接口后面进行多个部署。

    每个应用的设置都需要更新以使用唯一的端口。例如,端口 3000、4000 和 5000。

    之后,您使用 mod_proxy 类似于以下内容:

    <VirtualHost *:80>
    ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
    ProxyPassReverse / http://localhost:5000/
    ProxyPreserveHost On
    ServerName XXXXXXXXXXXXXXXXXXX
    TimeOut 300
    </VirtualHost>
    

    通过设置 ServerName,您可以将其绑定到特定的子域。

    如果您想将其全部绑定到不同的 url,您可以使用 Location 指令:

    <Location /production>
    ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
    ProxyPassReverse / http://localhost:5000/
    ProxyPreserveHost On
    ServerName XXXXXXXXXXXXXXXXXXX
    TimeOut 300
    </Location>
    

    但是,如果您要执行此操作,Plack 支持在 App.psgi 级别执行此操作,如 https://metacpan.org/pod/Dancer::Deployment#In-case-you-have-issues-with-Template::Toolkit-on-Dotcloud 所述(忽略标题并阅读,它是相关的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 2020-11-19
      相关资源
      最近更新 更多