Utilizzare Nginx per server di pagine diverse a seconda dell'indirizzo IP / sottorete


8

Per motivi orrendi di andare in ... Sto usando Nginx come un server web e vorrei che servisse una pagina per utenti interni (diciamo il 10.0.0.0/16) e un'altra pagina per utenti esterni su qualsiasi altro indirizzo IP.

Per esempio:

  • Il PC "interno" con un IP di 10.0.0.34 va su company.com/page.html ottiene la pagina internal.html

  • Il PC "esterno" con un IP di 8.8.8.8 va su company.com/page.html ottiene la pagina external.html


2
Chiarire; L'uso di Nginx non è orribile, quello che mi serve è farlo! Nginx è fantastico!
Jon Rhoades,

Risposte:


13

Utilizza il modulo geografico Nginx . Ti consente di impostare il valore della variabile in base a un indirizzo IP client. geola direttiva deve essere nella httpsezione:

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

Puoi usarlo in seguito in posizioni per cercare i file

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

Ciò significa che Nginx verrà impostato $clientsu extrao in intrabase all'IP di un client. Supponiamo che sia un client Intranet. Se un client lo richiede page.html, Nginx cercherà il file /your/root/page.html.intra. Se non esiste un file simile, lo cercherà /your/root/page.html. Se non riesce a trovare nessuno di questi, Nginx restituisce 404 risposte "Non trovato". Maggiori informazioni su "try_files" nella documentazione

A proposito, la indexdirettiva supporta anche le variabili. Per esempio

index index.$client.html index.html;

2
Ha funzionato bene - Ho finito per fare location = / nomefile e riscrivere ^ / nomefile.$client ultimo;
Jon Rhoades,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.