Wie Sie alle vorhandenen statischen Dateien direkt mit NGINX bereitstellen, aber den Rest an einen Backend-Server übertragen.
location /{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (-f $request_filename) {
access_log off;
expires 30d;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8080; # backend server listening
break;
}
}
Oben wird dazu dienen, alle vorhandenen Dateien direkt mit Nginx (z.B. Nginx zeigt nur PHP-source-code), sonst weiterleiten einer Anfrage an Apache. Ich muss ausschließen *.php-Dateien von der Regel so, dass die Anfragen nach *.php sind auch übergeben an Apache und verarbeitet.
Möchte ich Nginx, um alle statischen Dateien und Apache-Prozess alle dynamischen Sachen.
EDIT: Es ist white-list Ansatz, aber es ist nicht sehr elegant, Sehen, all die Erweiterungen, das will ich nicht.
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
access_log off;
expires 30d;
}
location /{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
EDIT 2: Auf neueren Versionen von Nginx verwenden try_files
statt http://wiki.nginx.org/HttpCoreModule#try_files
Kommentar zu dem Problem
Nur klare Dinge: obige code wird dazu dienen, eine statische Datei, wenn es vorhanden ist auf der Festplatte, wenn die Datei nicht existiert, wird der request an Apache. Dies funktioniert die meiste Zeit, da alle URLs in " meine Anwendungen verwenden mod_rewrite (oder routing) und nicht wirklich auf der Festplatte existieren. Nur der direkte Zugriff auf *.php Dateiname ist eine Ausnahme und muss analysiert werden, die von Apache.
InformationsquelleAutor der Frage F. Malina | 2009-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden try_files und benannte Position zu blockieren ('@apachesite'). Dies wird entfernen Sie unnötige regex-match-und if-block. Effizienter.
Update: Der Annahme dieser config ist, dass es nicht existiert ein php script unter
/path/to/root/of/static/files
. Dies ist Häufig in den meisten modernen php-frameworks. Falls Sie Ihren legacy-php-Projekte haben sowohl php-Skripten und statischen Dateien gemischt in den gleichen Ordner, die Sie haben können, auf die whitelist, alle die Dateitypen, die Sie wollen, nginx zu dienen.InformationsquelleAutor der Antwort Chuan Ma
Versuchen Sie dies:
Hoffentlich klappt es. Reguläre Ausdrücke haben eine höhere Priorität als die plain-strings, so dass alle Anforderungen mit der Endung
.php
werden sollte, forwared, Apache, wenn nur eine entsprechende.php
Datei vorhanden ist. Rest behandelt werden als statische Dateien. Der eigentliche Algorithmus der Bewertung der Lage ist hier.InformationsquelleAutor der Antwort Jasiu
Wenn Sie mod_rewrite zu verstecken, die Erweiterung des Skripts, oder wenn Sie einfach nur wie hübsche URLs, die in /, dann möchten Sie vielleicht, um dieses Konzept von der anderen Richtung. Sagen nginx zu lassen, etwas mit einer nicht-statischen extension durch zu gehen, um apache. Zum Beispiel:
Fand ich den ersten Teil dieses snippet über: http://code.google.com/p/scalr/wiki/NginxStatic
InformationsquelleAutor der Antwort lo_fye