如何控制在Apache的多部署设置中使用Dancer 2(不使用普通CGI)?
我们有一个perl web应用程序,它已经使用普通CGI很长时间了,现在我们正尝试用其他东西(mod_perl、fastcgi、whathaveyou)移植到Dancer 2,以便获得更高的性能 下面是我们现在的Apache设置(我知道Starman是一个强烈推荐的设置,但我们希望继续使用Apache作为我们的web服务器)如何控制在Apache的多部署设置中使用Dancer 2(不使用普通CGI)?,apache,perl,fastcgi,mod-perl,dancer,Apache,Perl,Fastcgi,Mod Perl,Dancer,我们有一个perl web应用程序,它已经使用普通CGI很长时间了,现在我们正尝试用其他东西(mod_perl、fastcgi、whathaveyou)移植到Dancer 2,以便获得更高的性能 下面是我们现在的Apache设置(我知道Starman是一个强烈推荐的设置,但我们希望继续使用Apache作为我们的web服务器) ... 不允许超限 选项+执行CGI-多视图跟随符号链接 命令允许,拒绝 通融 AddHandler cgi script.cgi ScriptAliasMatch/da
...
不允许超限
选项+执行CGI-多视图跟随符号链接
命令允许,拒绝
通融
AddHandler cgi script.cgi
ScriptAliasMatch/dance/(.*)/opt/alDente/versions/DanceApp/public/dispatch.cgi/$1
代理主机
代理通过/测试http://localhost:3000/
ProxyPassReverse/测试http://localhost:3000/
...
部署Dancer 2的普通CGI方法(如上所示)工作得非常好,即使在同一服务器下进行多个部署。问题:这样做会使性能提升为零
我还尝试使用Dancer2默认附带的简单web服务器,并让Apache指向它(如上所述)。它给我们带来了巨大的性能提升,简单易设置。问题:我们无法使用此设置设置多个部署,这对我们来说是绝对必须的。而且内部URL也会被代理搞得一团糟,除非我将/test
更改为/code>(即使我打开了ProxyPreserveHost
),但由于明显的原因,这不适用于多个部署
我昨天还花了一整天的时间试图让mod_perl使用这个设置,但是我读到mod_perl也不能处理同一服务器上的多个部署,也不能让它正常工作
我还尝试使用fastcgi设置它(使用dispatch.fcgi而不是dancer 2附带的dispatch.cgi),但这似乎没有提高性能
我能做些什么来解决这个问题?使用Apache并在同一台服务器上拥有能够处理多个部署的功能(由于预算问题,我们的服务器将不得不承载生产环境、测试环境和alpha环境)对我们来说是必须的。使用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>
ProxyPass/http://localhost:5000/ 重试=0保持激活=on
ProxyPassReverse/http://localhost:5000/
代理主机
服务器名XXXXXXXXXXXXXXXXX
超时300
通过设置ServerName,可以将其绑定到特定子域
如果希望将所有URL绑定到不同的URL,则可以使用Location指令:
<Location /production>
ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
ProxyPassReverse / http://localhost:5000/
ProxyPreserveHost On
ServerName XXXXXXXXXXXXXXXXXXX
TimeOut 300
</Location>
ProxyPass/http://localhost:5000/ 重试=0保持激活=on
ProxyPassReverse/http://localhost:5000/
代理主机
服务器名XXXXXXXXXXXXXXXXX
超时300
但是,如果要执行此操作,Plack支持在App.psgi级别执行此操作,如中所述(忽略标题并读取,这是相关的)
<Location /production>
ProxyPass / http://localhost:5000/ retry=0 Keepalive=on
ProxyPassReverse / http://localhost:5000/
ProxyPreserveHost On
ServerName XXXXXXXXXXXXXXXXXXX
TimeOut 300
</Location>