2009-03-24 1 views
1

Ich benutze Apache. Wie verzweige ich eine Web-Service-Anfrage, damit die beiden App-Server die gleiche Anfrage erhalten können? Machen Sie sich keine Sorgen darüber, dass Sie zu viele Antworten erhalten, da einer der beiden App Server überhaupt nichts antwortet. Ich habe keine Kontrolle darüber, wer den Webservice anruft, dh SSI-Seiten sind nicht erreichbar. Kann es durch Apache-Konfiguration getan werden, anstatt benutzerdefinierte Handler zu schreiben?Wie forme ich für Apache eine Web-Service-Anfrage, damit zwei App-Server dieselbe Anfrage erhalten können?

Antwort

0

Ein Ansatz wäre, eine dritte Proxy-Anwendung zu schreiben, die die Anforderungen bedient und zwei interne Anforderungen an die anderen beiden Anwendungen ausführt und das gewünschte Ergebnis zurückgibt.

Alternativ mit mod_perl (oder ein reguläres Modul in C geschrieben) Sie könnte auch ein PerlAccessHandler installieren, die Anfragen abfangen konnte, eine subrequest zur ersten App machen, bevor die Ausführung in die zweite App weiterhin im Stich gelassen.

Hier ist ein einfaches Beispiel dafür, wie Sie, dass zusammen würde

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; 

Jetzt ist Ihre app2 vhost in seiner Konfiguration verwenden können, den Handler durch so etwas wie dies zu tun

<Location /> 
    PerlAccessHandler MyApache2::MyProxy 
</Location> 
0

Weitere (ein bisschen "dreckiger") trick würde php-script automatisch zur ersten webapp vorkopieren, in der du die zweite app startest. Der Nachteil dieses Ansatzes ist, dass Sie warten müssen, bis die App 2 ° beendet wird, bevor die erste App gestartet wird. Es hängt also von der Komplexität und Geschwindigkeit Ihrer Anwendungen ab.

.Htaccess code 
php_value auto_prepend_file "learn.php" 
1

Sie könnten SSI-Seite erstellen, die damit umgehen.

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

+0

Kann ich weiß, was SSI Seite? –

+0

SSI == Serverseitige Include –

+0

SSI = Server Side Includes. Es ist Apache-Modul für sehr einfache dynamische Seiten. http://httpd.apache.org/docs/2.2/mod/mod_include.html – vartec

Verwandte Themen