Un server proxy è quello che parla a Internet per tuo conto. Ad esempio, se la rete del tuo college ha bloccato https: // www.Facebook.com/ma il dominio https: // esempio proxy.com è ancora accessibile, quindi puoi visitare quest'ultimo e inoltrerà tutte le tue richieste per i server di Facebook su Facebook e invierà le risposte da Facebook al tuo browser.
Per ricapitolare, un proxy invia richieste per conto di uno di più clienti a qualsiasi server in Internet. Un proxy inverso si comporta in modo simile.
UN proxy inverso riceve una richiesta da tutti i clienti per conto di uno o più server. Quindi, se hai un paio di server che ospitano la seconda guerra mondiale.esempio.com e ww2.esempio.com Un server proxy inverso può accettare le richieste per conto dei due server, inoltrare tali richieste ai rispettivi punti finali in cui la risposta viene generata e inviata al proxy inverso per essere inoltrata ai client.
Il set up
Prima di iniziare a modificare i file di configurazione Nginx e creare un server proxy inverso. Voglio mettere in pietra l'aspetto della mia configurazione, quindi quando stai cercando di implementarti il tuo design, sarebbe meno confuso.
Ho usato la piattaforma di DigitalOcean per girare tre VP. Sono tutti sulla stessa rete ciascuno con il proprio IP privato e solo un VPS ha un IP pubblico statico (questo sarà il nostro server proxy inverso.)
VM/Hostname | IP privato | IP pubblico | Ruolo |
ReverseProxy | 10.135.123.187 | 159.89.108.14 | Proxy inverso, eseguendo nginx |
Nodo-1 | 10.135.123.183 | N / A | Esecuzione del primo sito web |
Nodo-2 | 10.135.123.186 | N / A | Esecuzione del secondo sito Web |
I due diversi siti Web in esecuzione hanno nomi di dominio ww1.RANVIRSLOG.com E WW2.RANVIRSLOG.com ed entrambi i loro record indicano l'IP pubblico del reverseproxy, i.E, 159.89.108.14
L'idea alla base dell'IP privata è che le tre macchine virtuali possono parlarsi tramite questo IP privato, ma un utente remoto può accedere solo alla VM proxy inversa al suo IP pubblico. Questo è importante da tenere a mente. Ad esempio, non è possibile SSH in nessuna delle VM utilizzando il suo IP privato.
Inoltre, sia Node-1 che Node-2 hanno un server Web Apache che serve due pagine Web distinte. Questo ci aiuterà a distinguere l'uno dall'altro.
Il primo sito web dice "Il sito Web 1 funziona!!!"
Allo stesso modo, il secondo sito Web mostra questo:
I tuoi siti Web possono differire, ma se si desidera replicare questa configurazione come punto di partenza, eseguire APT Installa Apache2 su Node-1 e Node-2. Quindi modificare il file/var/www/html/indice.html in modo che il server web dica qualunque cosa tu voglia dire.
La VM inversa non è ancora intatta. Tutte le macchine virtuali gestiscono Ubuntu 18.04 LTS, ma sei libero di usare qualsiasi altro sistema operativo che desideri. Puoi anche emulare questo usando contenitori Docker. Creando una rete Docker Bridge definita dall'utente e un numero di contenitori spawing su di essa, è possibile assegnare a ciascun contenitore un IP privato e inoltrare tutto il proxy HTTP/HTTPS a un contenitore, che sarebbe il nostro contenitore proxy inverso NGINX.
Fin qui tutto bene.
Configurazione predefinita NGINX
Cominciamo installando Nginx sul server reverseProxy, sto usando Ubuntu Quindi Apt è il mio gestore dei pacchetti:
$ sudo apt install nginx
Prima di andare oltre una piccola nota sulla configurazione di Nginx. Tutti i vari file di configurazione sono archiviati in /etc /nginx incluso nginx.File conf che è il file di configurazione principale. Se guardiamo il contenuto di questo file (all'interno del blocco HTTP) noterai le seguenti due righe:
..
includere/etc/nginx/conf.D/*.conf;
includere/etc/nginx/siti abilitati/*;
..
La seconda riga include tutti i file nella directory abilitata ai siti alla configurazione di NGINX. Questa è la pratica standard sulla maggior parte delle distribuzioni basate su Debian. Ad esempio, la pagina Web "Welcome to Nginx" predefinita ha un file corrispondente denominato predefinito nella posizione/etc/nginx/siti-disponibile/imposta Pagina Web predefinita in modo da poter rimuovere in sicurezza il collegamento simbolico. L'originale è ancora disponibile nella directory disponibile dei siti.
$ rm/etc/nginx/siti abilitati/default
Ma quando creeremo configurazione proxy inversa lo faremo in conf.directory d (con il nostro nome file che ha un .Conf Extension) Questo è universale, e funziona in tutte le distribuzioni non solo Debian o Ubuntu.
Se non stai usando la distribuzione basata su Debian, troverai il valore predefinito Pagina di benvenuto configurazione AT/etc/nginx/conf.d/default.Conf Basta spostare il file in un posto sicuro se si desidera usarlo in futuro (dal momento che questo non è un collegamento simbolico)
$ mv/etc/nginx/conf.d/default.conf ~/default.conf
A volte può essere trovato in/etc/nginx/default.D perché le persone non possono essere d'accordo su un singolo semplice standard! Quindi dovresti fare un po 'di scavo nella directory /etc /nginx, per capirlo.
Aggiunta di blocchi proxy inversi
Come affermato in precedenza, i due diversi nomi di dominio che sto ospitando dietro questo proxy sono
Quindi creiamo un file per sito Web in/etc/nginx/conf.D/ cartella. Quindi siamo ben organizzati.
$ touch/etc/nginx/conf.d/ww1.conf
$ touch/etc/nginx/conf.d/ww2.conf
Puoi nominare i file qualunque cosa tu voglia, purché abbia un .conf alla fine del suo nome.
Nel primo file ww1.Conf Aggiungi le seguenti righe:
server
Ascolta 80;
Ascolta [::]: 80;
server_name ww1.RANVIRSLOG.com;
posizione /
proxy_pass http: // 10.135.123.183/;
Proxy_Buffering Off;
proxy_set_header X-REAL-IP $ remote_addr;
Le istruzioni di ascolto indicano a NGINX di ascoltare la porta 80 per entrambi i casi IPv4 e IPv6. Verifica quindi se il server_name è ww1.RANVIRSLOG.com quindi il blocco di posizione entra e proxy la richiesta a http: // 10.135.123.183/ con buffering disattivato. Inoltre, la linea Proxy_Set_Header ... assicura che l'IP originale del client sia inoltrato al server proxied. Questo è utile nel caso in cui desideri calcolare il numero di visitatori unici, ecc. Altrimenti il server proxied avrebbe un solo visitatore: il server Nginx.
L'opzione buffering e le opzioni set_header sono completamente opzionali e vengono appena aggiunte per rendere il più trasparente possibile. Per la seconda guerra mondiale.RANVIRSLOG.sito Web com, ho aggiunto la seguente configurazione at/etc/nginx/conf.d/ww2.Conf:
server
Ascolta 80;
Ascolta [::]: 80;
server_name ww2.RANVIRSLOG.com;
posizione /
proxy_pass http: // 10.135.123.186/;
Proxy_Buffering Off;
proxy_set_header X-REAL-IP $ remote_addr;
Salva entrambi i file e prova se la configurazione complessiva è valida o meno:
$ sudo nginx -t
Se ci sono errori, l'output del comando sopra ti aiuterà a trovarli. Ora riavvia il server:
$ Service Nginx Riavvia
E puoi testare se ha funzionato o meno visitando i diversi nomi di dominio nel browser e vedendo il risultato.
Il caso d'uso di ogni individuo è diverso. La configurazione sopra menzionata potrebbe aver bisogno di un po 'di modifiche per lavorare per il tuo scenario. Forse stai eseguendo più server sullo stesso host, ma in porte diverse, in quel caso la linea Proxy_Pass ... avrà http: // localhost: portnumber/come valore.
Questi dettagli dipendono molto dal tuo caso d'uso. Per ulteriori dettagli su altre opzioni e tuneables, consultare i documenti NGINX ufficiali.