Zend App im Unterverzeichnis bei nginx

Moe

1
Ich habe folgendes Problem: Zur Zeit läuft bei uns eine Webapp auf Zend-Basis auf einem Apache-Webserver. Da Apache jetzt nicht der schnellste Server ist, wenn es an parallele PHP-lastige Anfragen geht wollte ich gerne mal auf einem System zu Vergleichszwecken einen nginx-Server installieren. Die App läuft dabei in einem Unterverzeichnis der eigentlichen Hauptapp:

htdocs -> Hauptapp -> ZendApp

Nun ist es so, dass die "normale" Struktur einer ZendApp vorsieht, dass der Index einer ZendApp eben nicht um "Hauptverzeichnis" (also unter -> ZendApp) sondern in einem Verzeichnis "public" unterhalb des Hauptverzeichnisses liegt:

htdocs -> Hauptapp -> ZendApp -> public -> index.php

Alles was unter "public" wird durch die ZendApp auf das Hauptverzeichnis gemappt (wie z.B. die index.php).

Request: http://meinserver/ZendApp/Modul/index

geht zur index.php im public-Verzeichnis und wird dort dann als Verkettung im Hauptverzeichnis angezeigt. Der Benutzer selbst merkt eigentlich nicht, dass er über das public-Verzeichnis geleitet wird.

Unter Apache geht das mit zwei relativen schlichten .htaccess-Dateien:

htdocs -> Hauptapp -> ZendApp/.htaccess
Code:
RewriteEngine on
RewriteRule (.*) ./public/$1

htdocs -> Hauptapp -> ZendApp -> public/.htaccess

Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /ZendApp/index.php [NC,L]

Meine Frage ist jetzt, wie ich das geschickt in Rewrite-Regeln auf nginx umwandele. Ich beiße mir da seit zwei Tagen die Zähne dran aus. Der erste Rewrite ist ja ungefähr genauso simpel wie bei Apache:
Code:
# Leite alle Requests nach public/ um
location /ZendApp/ {
    rewrite /(.*) /ZendApp/public/$1;
}

Beim zweiten Schnipsel versagen allerdings meine Zellen gerade.

Es soll im Endeffekt erreicht werden, dass statt der index.php in ZendApp die index.php in public/ verwendet wird. Anschließend sieht die Url-Struktur so aus:

http://meinserver/ZendApp/Modul/Action

also z.B.

http://meinserver/ZendApp/lager/auflisten

Kann mir jemand helfen oder mir vielleicht einen Kontakt zu jemanden vermitteln, der sich damit auskennt? Die nginx-Foren/Mailingliste gab bis jetzt nicht wirklich viel her ..
 
Zuerst würde ich die rewrite-Regeln mal in die Vhost Konfig schreiben (anstatt in die .htaccess).
Ich glaube nicht, dass der Engpass beim Apache liegt.

Warum eigentlich die doppelte Weiterleitung? Ihr könntet doch den DocumentRoot gleich auf das public Verzeichnis legen.

Wo klemmts denn genau? Habt ihr soviel parallele Zugriffe? Wenn die PHP Scripte lange benötigen, nützt dir der schnellste Webserver nichts.
 
Hast du dir mein Posting richtig durchgelesen? Es geht um eine App in einer App. Das heißt es gibt weder ein DocumentRoot für die App in der HauptApp (denn das liegt natürlich auf der HauptApp) noch einen Vhost für die App in der HauptApp. Die App liegt in einem Unterverzeichnis des DocumentRoots der HauptApp.

Darüber hinaus geht es hier ums Testen. Es hilft mir also wenig, wenn eine Antwort in Richtung "warum willst du überhaupt wechseln" gegeben wird :)

PS: Noch ein wenig Hintergrund, um dein Frage vielleicht doch aufzugreifen: Ein simpler Apachebench mit 5000rq/100ps ist auf unserem Setup bei nginx z.B. fast 20x schneller als Apache (Apache < 2.4 wohlgemerkt).
 
Es geht um eine App in einer App. Das heißt es gibt weder ein DocumentRoot für die App in der HauptApp (denn das liegt natürlich auf der HauptApp) noch einen Vhost für die App in der HauptApp. Die App liegt in einem Unterverzeichnis des DocumentRoots der HauptApp.

Na und? Deswegen gibts trotzdem eine Vhost Konfig., in die Du deine Rewrites je Directory schreiben kannst, spart zwei Dateizugriffe _JE_ Request.

Ein simpler Apachebench mit 5000rq/100ps ist auf unserem Setup bei nginx z.B. fast 20x schneller als Apache (Apache < 2.4 wohlgemerkt).

Sagt gar nix aus, wenn man nicht mal die simpelsten Schalterchens des Apachen drückt.
 
Na und? Deswegen gibts trotzdem eine Vhost Konfig., in die Du deine Rewrites je Directory schreiben kannst, spart zwei Dateizugriffe _JE_ Request.

Okay, und das ist dann also das Bottleneck? Klingt ein wenig absurd. Ich glaube nicht, dass IO hier eine große Rolle spielt (ausgehend vom Serversetup).


Sagt gar nix aus, wenn man nicht mal die simpelsten Schalterchens des Apachen drückt.

Das ignoriere ich jetzt einfach mal. Es geht mir immer noch nicht darum, Apache besser zu konfigurieren. Zumal dir für eine solche Schlussfolgerung die Referenz fehlt.
 
Zurück
Oben