Use Nginx para servidor de diferentes páginas dependiendo de la dirección IP / subred

8

Por razones horribles para entrar ... Estoy usando Nginx como servidor web y me gustaría que sirva una página para usuarios internos (digamos en 10.0.0.0/16) y otra página para usuarios externos en cualquier otra dirección IP.

Por ejemplo:

  • La PC "interna" con una IP de 10.0.0.34 va a company.com/page.html obtiene la página internal.html

  • La PC "externa" con una IP de 8.8.8.8 va a company.com/page.html obtiene la página external.html

Jon Rhoades
fuente
2
Para aclarar; Usar Nginx no es horrible, ¡lo que necesito que haga es! ¡Nginx es genial!
Jon Rhoades

Respuestas:

13

Haga uso del módulo geo Nginx . Le permite establecer el valor de la variable en función de la dirección IP de un cliente. geola directiva debe estar en la httpsección:

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

Puede usarlo más tarde en ubicaciones para buscar archivos

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

Lo que significa que Nginx se establecerá $clienten cualquiera extrao en intrafunción de la IP de un cliente. Asumamos que es un cliente de Intranet. Si un cliente lo solicita page.html, Nginx buscará el archivo /your/root/page.html.intra. Si no existe dicho archivo, lo buscará /your/root/page.html. Si no puede encontrar ninguno de estos, Nginx devuelve la respuesta 404 "No encontrado". Más sobre "try_files" en la documentación

Por cierto, la indexdirectiva también admite variables. P.ej

index index.$client.html index.html;
Alexander Azarov
fuente
2
Funcionó bien: terminé haciendo location = / filename & rewrite ^ /filename.$client last;
Jon Rhoades