Nginx

Proxy inverso Nginx

Proxy inverso Nginx

Che cos'è un proxy inverso?

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://exampleproxy.com è ancora accessibile, quindi puoi visitare quest'ultimo e inoltrerà tutte le tue richieste per i server di Facebook a Facebook e invierà le risposte da Facebook al tuo browser.

Per ricapitolare, un proxy invia richieste per conto di uno o più client a qualsiasi server in Internet. Un proxy inverso si comporta in modo simile.

UN proxy inverso riceve richieste da tutti i clienti per conto di uno o più server. Quindi, se hai un paio di server che ospitano ww1.esempio.com e ww2.esempio.com un server proxy inverso può accettare richieste per conto dei due server, inoltrare tali richieste ai rispettivi punti finali in cui viene generata la risposta e rinviata al proxy inverso per essere inoltrata ai client.

Il set up

Prima di iniziare a modificare i file di configurazione di Nginx e creare un server proxy inverso. Voglio scolpire nella pietra l'aspetto della mia configurazione, quindi quando stai cercando di implementare il tuo design, sarebbe meno confuso.

Ho usato la piattaforma di DigitalOcean per far girare tre VPS. 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/nome host 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.come e ww2.ranvirslog.come ed entrambi i loro record A puntano all'IP pubblico del proxy inverso, cioè.e, 159.89.108.14

L'idea alla base dell'IP privato è che le tre VM possono comunicare tra loro tramite questo IP privato, ma un utente remoto può accedere solo alla VM del proxy inverso al suo IP pubblico. Questo è importante da tenere a mente. Ad esempio, non puoi ssh in nessuna delle VM usando il suo IP privato.

Inoltre, sia il Nodo-1 che il Nodo-2 hanno un server web Apache che serve due pagine web distinte. Questo ci aiuterà a distinguere l'uno dall'altro.

Il primo sito dice “WEBSITE 1 WORKS!!!"

Allo stesso modo, il secondo sito web mostra questo:

I tuoi siti Web potrebbero essere diversi, ma se desideri replicare questa configurazione come punto di partenza, esegui apt install apache2 su Nodo-1 e Nodo-2. Quindi modifica il file /var/www/html/index.html in modo che il server web dica quello che vuoi che dica.

La VM del proxy inverso è ancora intatta. Tutte le macchine virtuali eseguono Ubuntu 18.04 LTS, ma sei libero di usare qualsiasi altro sistema operativo che desideri. Puoi persino emularlo usando i contenitori Docker. Creando una rete bridge Docker definita dall'utente e generando contenitori 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 di Nginx

Iniziamo installando Nginx sul server proxy inverso, sto usando Ubuntu quindi apt è il mio gestore di pacchetti:

$ sudo apt install nginx

Rimozione della configurazione predefinita se si utilizza una distribuzione basata su Debian

Prima di andare oltre, una piccola nota sulla configurazione di Nginx. Tutti i vari file di configurazione sono archiviati in /etc/nginx incluso nginx.conf che è il file di configurazione principale. Se osserviamo il contenuto di questo file (all'interno del blocco http) noterete le seguenti due righe:


includi /etc/nginx/conf.d/*.conf;
includi /etc/nginx/sites-enabled/*;

La seconda riga include tutti i file nella directory abilitata per i siti alla configurazione di Nginx. Questa è la pratica standard sulla maggior parte delle distribuzioni basate su Debian. Ad esempio, la pagina Web predefinita "Welcome to Nginx" ha un file corrispondente denominato default nella posizione /etc/nginx/sites-available/default con un collegamento simbolico a /etc/nginx/sites-enabled/, ma non ne abbiamo bisogno pagina web predefinita in modo da poter rimuovere in sicurezza il collegamento simbolico. L'originale è ancora disponibile nella directory dei siti disponibili.

$ rm /etc/nginx/sites-enabled/default

Ma quando creeremo la configurazione del proxy inverso lo faremo in conf.d directory (con il nome del nostro file con a .conf estensione) questo è universale, e funziona su tutte le distribuzioni, non solo su Debian o Ubuntu.

Rimozione della configurazione predefinita per altre distribuzioni

Se non stai usando una distribuzione basata su Debian, troverai l'impostazione predefinita Pagina di benvenuto configurazione in /etc/nginx/conf.d/predefinito.conf sposta semplicemente il file in un posto sicuro se vuoi usarlo in futuro (poiché questo non è un collegamento simbolico)

$ mv /etc/nginx/conf.d/predefinito.conf ~/default.conf

A volte può essere trovato in /etc/nginx/default.d perché le persone semplicemente non riescono ad essere d'accordo su un unico semplice standard! Quindi dovresti fare un po' di ricerche nella directory /etc/nginx, per capirlo.

Aggiunta di blocchi di proxy inverso

Come affermato in precedenza, i due diversi nomi di dominio che sto ospitando dietro questo proxy sono

  1. ranvirslog.com (SITO WEB 1) con IP 10.135.123.183
  2. ranvirslog.com (SITO WEB 2) con IP 10.135.123.186

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 come preferisci, purché abbia un .conf alla fine del suo nome.

Nel primo file ww1.conf aggiungere le seguenti righe:

server
ascolta 80;
ascolta [::]:80;
 
nome_server ww1.ranvirslog.com;
 
Posizione /
proxy_pass http://10.135.123.183/;
proxy_buffering disattivato;
proxy_set_header X-Real-IP $remote_addr;

Le istruzioni di ascolto dicono a Nginx di ascoltare sulla porta 80 sia per i casi IPv4 che IPv6. Quindi controlla se il nome_server è ww1.ranvirslog.com, quindi il blocco della posizione si attiva e inoltra la richiesta a http://10.135.123.183/ con buffering disattivato. Inoltre, la riga proxy_set_header… assicura che l'IP originale del client venga inoltrato al server proxy. Questo è utile nel caso in cui desideri calcolare il numero di visitatori unici, ecc. Altrimenti il ​​server proxy avrebbe un solo visitatore: il server Nginx.

L'opzione di buffering e le opzioni set_header sono completamente opzionali e vengono semplicemente aggiunte per rendere il proxy il più trasparente possibile. Per la seconda guerra mondiale.ranvirslog.com, ho aggiunto la seguente configurazione in /etc/nginx/conf.d/ww2.conf:

server
ascolta 80;
ascolta [::]:80;
 
nome_server ww2.ranvirslog.com;
 
Posizione /
proxy_pass http://10.135.123.186/;
proxy_buffering disattivato;
proxy_set_header X-Real-IP $remote_addr;

Salva entrambi i file e verifica se la configurazione complessiva è valida o meno:

$ sudo nginx -t

Se ci sono errori, l'output del comando precedente ti aiuterà a trovarli e risolverli. Ora riavvia il server:

$ service nginx riavvio

E puoi verificare se ha funzionato o meno visitando i diversi nomi di dominio nel tuo browser e vedendo il risultato.

Conclusione

Il caso d'uso di ogni individuo è diverso. La configurazione sopra menzionata potrebbe richiedere un po' di modifiche per funzionare per il tuo scenario. Forse stai eseguendo più server sullo stesso host, ma su porte diverse, in tal caso la riga proxy_pass… avrà http://localhost:portNumber/ come valore.

Questi dettagli dipendono molto dal tuo caso d'uso. Per ulteriori dettagli su altre opzioni e sintonizzabili, vedere i documenti ufficiali di Nginx.

Tutorial Shadow of the Tomb Raider per Linux
Shadow of the Tomb Raider è la dodicesima aggiunta alla serie Tomb Raider, un franchise di giochi d'azione e avventura creato da Eidos Montreal. Il gi...
Come aumentare gli FPS in Linux?
FPS sta per Fotogrammi al secondo. Il compito dell'FPS è misurare il frame rate nelle riproduzioni video o nelle prestazioni di gioco game. In parole ...
I migliori giochi di laboratorio dell'app Oculus
Se possiedi un visore Oculus, devi essere informato sul sideloading. Il sideloading è il processo di installazione di contenuti non archiviati sul vis...