我正在使用Apache。如何分叉Web服务请求以便两个应用服务器可以接收相同的请求?不要担心返回响应太多,因为两个App Server中的一个不会回复任何内容。我无法控制谁调用Web服务,这意味着SSI页面已经出局。可以通过Apache配置而不是编写自定义处理程序来完成吗?
答案 0 :(得分:1)
您可以创建SSI页面,即可处理该页面。
index.shtml
<!--#include virtual="/path/to/app1/index.php?$QUERY_STRING -->
<!--#include virtual="/path/to/app2/index.py?$QUERY_STRING -->
http://httpd.apache.org/docs/2.2/mod/mod_include.html#includevirtual
答案 1 :(得分:0)
一种方法是编写第三个代理应用程序来为请求提供服务,并对其他两个应用程序执行两个内部请求,返回所需的结果。
或者,使用mod_perl(或用C语言编写的常规模块),您还可以安装PerlAccessHandler来拦截请求,在第二个应用程序继续执行之前对第一个应用程序进行子请求
这是一个粗略的例子,说明如何将它们放在一起
package MyApache2::MyProxy;
use strict;
use warnings;
use Apache2::RequestRec ();
use Apache2::Connection ();
use Apache2::Const -compile => qw(FORBIDDEN OK);
sub handler {
my $r = shift;
#prepare a user agent to make the request
my $ua = LWP::UserAgent->new;
$ua->agent("MyUserAgent/0.1");
#make a request on the app1 domain with the same uri
$app1url="http://app1.domain".$r->unparsed_uri();
my $request = HTTP::Request->new(GET => $app1url);
my $response = $ua->request($request);
#check the outcome of the response
if ($response->is_success)
{
#check $response->content if you like
}
#tell apache it's ok to continue, falling through to app 2
return Apache2::Const::OK;
}
1;
现在你的app2 vhost可以通过在配置中执行类似的操作来使用处理程序
<Location />
PerlAccessHandler MyApache2::MyProxy
</Location>
答案 2 :(得分:0)
另一个(有点“脏”)技巧将自动将php脚本添加到第一个启动第二个应用程序的webapp。这种方法的缺点是,您必须等待2°应用程序才能在第一个应用程序启动之前终止。因此,它取决于应用程序的复杂性和速度。
.Htaccess code
php_value auto_prepend_file "learn.php"