对于Apache,如何分叉Web服务请求以便两个应用服务器可以接收相同的请求?

时间:2009-03-24 08:38:16

标签: apache

我正在使用Apache。如何分叉Web服务请求以便两个应用服务器可以接收相同的请求?不要担心返回响应太多,因为两个App Server中的一个不会回复任何内容。我无法控制谁调用Web服务,这意味着SSI页面已经出局。可以通过Apache配置而不是编写自定义处理程序来完成吗?

3 个答案:

答案 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"