Verwenden Sie Nginx, um je nach IP-Adresse / Subnetz unterschiedliche Seiten zu bedienen

8

Aus abscheulichen Gründen ... Ich verwende Nginx als Webserver und möchte, dass es eine Seite für interne Benutzer (z. B. am 10.0.0.0/16) und eine andere Seite für externe Benutzer mit einer anderen IP-Adresse bereitstellt.

Zum Beispiel:

  • "Interner" PC mit einer IP von 10.0.0.34 geht zu company.com/page.html und ruft die Seite internal.html auf

  • "Externer" PC mit einer IP von 8.8.8.8 geht zu company.com/page.html und ruft die Seite external.html ab

Jon Rhoades
quelle
2
Zu klären; Die Verwendung von Nginx ist nicht abscheulich. Ich muss es nur tun! Nginx ist großartig!
Jon Rhoades

Antworten:

13

Nutzen Sie das Nginx- Geomodul . Hier können Sie den Wert der Variablen basierend auf einer Client-IP-Adresse festlegen. geoRichtlinie muss in httpAbschnitt sein:

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }

Sie können es später an Speicherorten verwenden, um Dateien nachzuschlagen

location / {
  try_files $uri.$client $uri = 404;
}

Dies bedeutet, dass Nginx $cliententweder auf extraoder intrabasierend auf der IP eines Clients festgelegt wird. Nehmen wir an, es ist ein Intranet-Client. Wenn ein Client danach fragt page.html, sucht Nginx nach einer Datei /your/root/page.html.intra. Wenn es keine solche Datei gibt, wird nach gesucht /your/root/page.html. Wenn keiner von beiden gefunden werden kann, gibt Nginx die Antwort 404 "Nicht gefunden" zurück. Mehr zu "try_files" in der Dokumentation

Die indexDirektive unterstützt übrigens auch Variablen. Z.B

index index.$client.html index.html;
Alexander Azarov
quelle
2
Hat gut funktioniert - am Ende habe ich location = / filename & rewrite ^ /filename.$client last;
Jon Rhoades