Wie alle vorhandenen statische Dateien direkt mit NGINX, aber Proxy den Rest zu einem Backend-Server dienen.

StackOverflow https://stackoverflow.com/questions/869001

Frage

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;
        }
    }

Vor dienen alle vorhandenen Dateien direkt mit Nginx (z Nginx zeigt nur PHP-Quellcode), ansonsten nach vorne eine Anfrage an Apache. Ich brauche * .php-Dateien von der Regel ausschließen, so dass Anfragen für * .php auch Apache weitergegeben und verarbeitet werden.

Ich möchte Nginx alle statischen Dateien und Apache zu handhaben alle dynamischen Material zu verarbeiten.

EDIT:. Es gibt weiße Liste Ansatz, aber es ist nicht sehr elegant, All diese Erweiterungen, ich will das 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: Bei neueren Versionen von Nginx Verwendung try_files statt http://wiki.nginx.org/HttpCoreModule #try_files

War es hilfreich?

Lösung

Verwenden Sie try_files und benannte Position Block ( '@apachesite'). Dadurch wird eine unnötige Regex und wenn Block entfernen. Effizienter zu gestalten.

location / {
    root /path/to/root/of/static/files;
    try_files $uri $uri/ @apachesite;

    expires max;
    access_log off;
}

location @apachesite {
    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;
}

Update: Die Annahme dieser Konfiguration ist, dass es keinen PHP-Skript unter /path/to/root/of/static/files existiert. Dies ist in den meisten modernen PHP-Frameworks gemeinsam. Falls Ihre Legacy-PHP-Projekte sowohl PHP-Skripte und statische Dateien im selben Ordner gemischt, können Sie die weiße Liste setzen müssen dienen Nginx alle Dateitypen, die Sie wollen.

Andere Tipps

Versuchen Sie folgendes:

location / {
    root /path/to/root;
    expires 30d;
    access_log off;
}

location ~* ^.*\.php$ {
    if (!-f $request_filename) {
        return 404;
    }
    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;
}

Hoffentlich funktioniert es. Reguläre Ausdrücke haben eine höhere Priorität als einfache Strings, so dass alle Anfragen in .php Endung sollte Apache forwared werden, wenn nur eine entsprechende .php Datei vorhanden ist. Rest wird als statische Dateien behandelt werden. Der eigentliche Algorithmus Lage der Auswertung ist hier .

Wenn Sie mod_rewrite verwenden, um die Erweiterung Ihrer Skripte zu verstecken, oder wenn Sie gerade wie ziemlich URLs, die in / zu beenden, dann könnten Sie dies aus der anderen Richtung nähern wollen. Sagen Sie nginx alles mit einer nicht-statischen Dehnung zu lassen, um Apache zu gehen. Zum Beispiel:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$
{
    root   /path/to/static-content;
}

location ~* ^!.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
    if (!-f $request_filename) {
        return 404;
    }
    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;
}

fand ich den ersten Teil dieses Schnipsel über an: http://code.google .com / p / Scalr / wiki / NginxStatic

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top