Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何控制在Apache的多部署设置中使用Dancer 2(不使用普通CGI)?_Apache_Perl_Fastcgi_Mod Perl_Dancer - Fatal编程技术网

如何控制在Apache的多部署设置中使用Dancer 2(不使用普通CGI)?

如何控制在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

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

下面是我们现在的Apache设置(我知道Starman是一个强烈推荐的设置,但我们希望继续使用Apache作为我们的web服务器)


...
不允许超限
选项+执行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>