2016-05-29 12 views
1

Ich habe einen Apache-Webserver, der Port 80 überwacht. Mit Apache, einem PHP/MySQL-System, das auf dem Zend-Framework basiert. Und ich habe auch einen Knoten-Server, der Port 3000 abhört.Apache, Node, .htaccess

Wenn ein Client eine Anforderung immer an Port 80 sendet, wird es zuerst von Apache behandelt. Ich möchte die folgenden Regeln anwenden, bevor ich die Anfrage behandle:

if content-type is "application/json" then 
    use apache web server 
else if content-type is "application/zend" then 
    use apache web server 
else 
    use node server 

Hier wird Inhaltstyp in den Anforderungsheadern gesendet. Der Inhaltstyp "application/zend" ist ein benutzerdefinierter Inhaltstyp, der besagt, dass wir für diesen Typ einer bestimmten Anfrage keinen Node-Server verwenden wollen (ich brauche das aus einigen Gründen).

Ich habe versucht, httpd-vhosts.conf mit

ProxyPreserveHost on 
ProxyPass/http://localhost:3000/ 
ProxyPassReverse/http://localhost:3000/ 

Aber das ist natürlich nicht genug, da nicht alles soll durch den Node-Server (auf Port 3000) behandelt werden, um zu ändern. Daher sollten einige Regeln hinzugefügt werden. Aber ich bin mir nicht sicher, wo/wie. Ich habe auch versucht, die .htaccess-Datei zu ändern, bin mir aber auch nicht sicher.

Jede Hilfe wäre großartig! Vielen Dank!

+0

Was ist die Apache-Version –

+0

Hallo! Die Version ist Apache/2.4.18 –

Antwort

1

Dies sollte (in .conf Datei) arbeiten:

RewriteEngine on 
RewriteCond %{HTTP:Content-type} !=application/json 
RewriteCond %{HTTP:Content-type} !=application/zend 
RewriteRule^http://%{HTTP_HOST}:3000%{REQUEST_URI} [P] 

Beachten Sie, dass dies eine Leistungseinbuße führen könnte, und wenn die meisten Ihrer Anfragen auf dem Knoten beenden, sollten wir vielleicht eine bessere Lösung suchen.

+0

Vielen Dank! Arbeiten. Ich musste nur die letzte Zeile ändern in: RewriteRule^http: //% {HTTP_HOST}: 3000% {REQUEST_URI} [P] (ohne den Schrägstrich vor% {REQUEST_URI}). Ich berücksichtige Ihren Kommentar zu Vorstellungen. –

+0

Tatsächlich enthält% {REQUEST_URI} bereits den führenden Schrägstrich –