Utilisez Nginx pour gérer différentes pages en fonction de l'adresse IP / du sous-réseau

8

Pour des raisons hideuses d'entrer ... J'utilise Nginx comme serveur Web et je voudrais qu'il serve une page pour les utilisateurs internes (disons le 10.0.0.0/16) et une autre page pour les utilisateurs externes sur n'importe quelle autre adresse IP.

Par exemple:

  • Le PC "interne" avec une IP de 10.0.0.34 va sur company.com/page.html obtient la page internal.html

  • Un PC "externe" avec une IP de 8.8.8.8 va sur company.com/page.html obtient la page external.html

Jon Rhoades
la source
2
Clarifier; Utiliser Nginx n'est pas hideux, ce dont j'ai besoin, c'est! Nginx est génial!
Jon Rhoades

Réponses:

13

Utilisez le module géographique Nginx . Il vous permet de définir la valeur de la variable en fonction d'une adresse IP client. geoLa directive doit être dans la httpsection:

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

Vous pouvez l'utiliser plus tard dans des emplacements pour rechercher des fichiers

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

Ce qui signifie que Nginx sera défini $clientsur extraou intrabasé sur l'IP d'un client. Supposons que c'est un client Intranet. Si un client le demande page.html, Nginx recherchera le fichier /your/root/page.html.intra. S'il n'y a pas un tel fichier, il recherchera /your/root/page.html. S'il ne trouve aucun de ces éléments, Nginx renvoie la réponse 404 "Not Found". Plus d'informations sur "try_files" dans la documentation

Soit dit en passant, la indexdirective prend également en charge les variables. Par exemple

index index.$client.html index.html;
Alexander Azarov
la source
2
A bien fonctionné - j'ai fini par faire location = / filename & rewrite ^ /filename.$client last;
Jon Rhoades