Use o Nginx para servidor de páginas diferentes, dependendo do endereço IP / sub-rede

8

Por motivos hediondos para entrar ... Estou usando o Nginx como servidor da Web e gostaria que ele servisse uma página para usuários internos (por exemplo, 10.0.0.0/16) e outra página para usuários externos em qualquer outro endereço IP.

Por exemplo:

  • O PC "interno" com um IP 10.0.0.34 vai para company.com/page.html obtém a página internal.html

  • O PC "externo" com um IP de 8.8.8.8 vai para company.com/page.html obtém a página external.html

Jon Rhoades
fonte
2
Esclarecer; Usar o Nginx não é hediondo, o que eu preciso fazer é! Nginx é ótimo!
Jon Rhoades

Respostas:

13

Faça uso do módulo geográfico Nginx . Permite definir o valor da variável com base no endereço IP do cliente. geoA diretiva deve estar na httpseção:

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

Você pode usá-lo posteriormente em locais para procurar arquivos

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

O que significa que o Nginx será definido $clientcomo extraou com intrabase no IP do cliente. Vamos supor que seja um cliente da Intranet. Se um cliente solicitar page.html, o Nginx procurará pelo arquivo /your/root/page.html.intra. Se não houver esse arquivo, ele procurará /your/root/page.html. Se não conseguir encontrar nenhum desses, o Nginx retornará a resposta 404 "Não encontrado". Mais sobre "try_files" na documentação

A propósito, a indexdiretiva também suporta variáveis. Por exemplo

index index.$client.html index.html;
Alexander Azarov
fonte
2
Funcionou bem - acabei fazendo location = / filename & reescreva ^ /filename.$client last;
Jon Rhoades