it-swarm.com.de

So können Sie alle vorhandenen statischen Dateien direkt mit NGINX bereitstellen, den Rest jedoch per Proxy an einen Back-End-Server senden.

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 werden alle vorhandenen Dateien direkt mit Nginx bedient (z. B. zeigt Nginx nur PHP Quellcode) an, ansonsten leite ich eine Anfrage an Apache weiter. Ich muss * .php-Dateien von der Regel ausschließen, damit Anfragen nach * .php werden ebenfalls an Apache übergeben und verarbeitet.

Ich möchte, dass Nginx alle statischen Dateien verarbeitet und Apache alle dynamischen Daten verarbeitet.

EDIT: Es gibt White-List-Ansatz, aber es ist nicht sehr elegant, siehe 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;
    }

BEARBEITEN 2: Auf neueren Versionen von Nginx verwenden Sie try_files statt http://wiki.nginx.org/HttpCoreModule#try_files

76
F. Malina

Verwenden Sie try_files und den benannten Standortblock ('@apachesite'). Dadurch werden unnötige Regex-Übereinstimmungen und Blockierungen entfernt. Effizienter.

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 unter /path/to/root/of/static/files Kein PHP-Skript existiert. Dies ist in den meisten modernen PHP-Frameworks üblich. Falls sich in Ihren älteren PHP-Projekten sowohl PHP-Skripte als auch statische Dateien im selben Ordner befinden, müssen Sie möglicherweise alle Dateitypen, die nginx bereitstellen soll, auf die Whitelist setzen.

144
Chuan Ma

Versuche dies:

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 klappt es. Reguläre Ausdrücke haben eine höhere Priorität als einfache Zeichenfolgen. Daher sollten alle Anforderungen, die auf .php Enden, an Apache weitergeleitet werden, wenn nur eine entsprechende .php - Datei vorhanden ist. Rest wird als statische Dateien behandelt. Der tatsächliche Algorithmus zur Standortbewertung ist hier .

18
Jasiu

Wenn Sie mod_rewrite verwenden, um die Erweiterung Ihrer Skripte auszublenden, oder wenn Sie nur hübsche URLs mögen, die mit/enden, möchten Sie dies möglicherweise aus der anderen Richtung tun. Weisen Sie nginx an, alles mit einer nicht statischen Erweiterung an Apache durchzulassen. Beispielsweise:

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

Ich habe den ersten Teil dieses Snippets unter folgender Adresse gefunden: http://code.google.com/p/scalr/wiki/NginxStatic

6
lo_fye