So legen Sie den Nginx-Stammpfad basierend auf dem Host fest

So legen Sie den Nginx-Stammpfad basierend auf dem Host fest

Wie kann ich für einen Besucherhost festlegen, dass er einen bestimmten Stammpfad in Nginx verwendet?

Besucher mit IP 1.1.1.1 verwenden

root /srv/web1

alle anderen Besucher nutzen

root /srv/web2

Antwort1

Diese Frage lässt sich leicht beantworten, indem man ein wenig recherchiert und die Dokumentation liest (vorzugsweise beginnend mit demRatgeber für Anfängerund dannWie nginx eine Anfrage verarbeitet), ich werde es trotzdem beantworten.

Ich gehe davon aus, dass Sie einen Server mit mehr als einer Netzwerkschnittstelle und IP-Adresse haben, wobei die Adresse 1.1.1.1 einer Schnittstelle und die anderen Adressen den jeweiligen Schnittstellen zugewiesen sind.

Nginx ist in dieser Hinsicht sehr flexibel. Tatsächlich gibt es immer einen serverBlock, der als Standard verwendet wird, wenn Nginx keinen anderen Serverblock finden kann server_name: entweder der erste serverBlock der Datei oder der, der default_serverin der listenDirektive angegeben ist. Und denken Sie daran:listenSie können in der Direktive eine IP angeben.

Das bedeutet in Ihrem Fall:

server {
    listen 80 default_server;
    root /srv/web2;
    [...]
}
server {
    listen 1.1.1.1:80;
    root /srv/web1;
    [...]
}

Wie Sie im obigen Beispiel sehen können, serverlauscht der erste Block auf allen Schnittstellen auf Port 80, während der zweite Block nur auf der Schnittstelle 1.1.1.1 auf Port 80 lauscht. Daher erhält jeder, der Ihre Site über die Netzwerkschnittstelle 1.1.1.1 besucht, Dateien von /srv/web1, unabhängig vom Hostfeld in der HTTP-Anforderung (d. h. dem Domänennamen, der in der URL-Leiste steht).

Ein ähnliches Verhalten lässt sich erreichen, indem man die IP-Adresse server_namewie folgt in die Direktive einfügt:

server {
    listen 80;
    server_name 1.1.1.1;
    [...]
}
* Beachten Sie, dass dieser letzte serverBlock nur Anfragen an die wörtliche IP-Adresse und nicht an Domänennamen abfängt.

Ich hoffe, dies beantwortet Ihre Frage. Geben Sie beim nächsten Mal jedoch bitte zusätzliche Informationen zu Ihrer aktuellen Konfiguration an und recherchieren Sie ein wenig.

Aktualisieren

Um das beschriebene Verhalten zu erreichen, können Sie denGeodatenModulwie indiese Frage:

geo $client {
    default web2;
    1.1.1.1 web1;
}
server {
    [...]
    root /srv/$client;
    [...]
}
Diese Konfiguration verwendet dieGeodatenModul, um eine Variable ( $client) basierend auf der IP-Adresse des Clients zu setzen. Diese Variable wird entweder auf den Standardwertweb2oder die spezifischeWebseiteund wird dann in der Richtlinie ersetzt root.

Beachten Sie, dass sich die geoDirektive innerhalb des httpBlocks und nicht serverin Blöcken befinden muss. Der obige Codeausschnitt sollte so funktionieren, wie er ist, aber ich übernehme keine Garantie, da ich ihn nicht getestet habe.

verwandte Informationen