Day 3 Keynote: Made Here Together (Cloud Next '18)
Sommario:
- Prerequisiti
- Utilizzo di Nginx come proxy inverso
- Passare le intestazioni di richiesta
- Configurazione di Nginx come proxy inverso su un server proxy non HTTP
- Opzioni comuni di proxy inverso Nginx
- Conclusione
Un proxy inverso è un servizio che accetta una richiesta client, invia la richiesta a uno o più server proxy, recupera la risposta e consegna la risposta del server al client.
A causa delle sue prestazioni e scalabilità, NGINX viene spesso utilizzato come proxy inverso per server HTTP e non HTTP. Una tipica configurazione del proxy inverso consiste nel mettere Nginx davanti alle applicazioni Node.js, Python o Java.
L'uso di Nginx come proxy inverso offre numerosi vantaggi aggiuntivi:
- Bilanciamento del carico: Nginx può eseguire il bilanciamento del carico per distribuire le richieste dei client su server proxy, migliorando le prestazioni, la scalabilità e l'affidabilità. Memorizzazione nella cache: con Nginx come proxy inverso, è possibile memorizzare nella cache le versioni pre-renderizzate delle pagine per accelerare i tempi di caricamento delle pagine. Funziona memorizzando nella cache il contenuto ricevuto dalle risposte dei server proxy e utilizzandolo per rispondere ai client senza dover contattare il server proxy per lo stesso contenuto ogni volta. Terminazione SSL: Nginx può fungere da endpoint SSL per le connessioni con i client. Gestirà e decrittograferà le connessioni SSL in entrata e crittograferà le risposte del server proxy. Compressione: se il server proxy non invia risposte compresse, è possibile configurare Nginx per comprimere le risposte prima di inviarle ai client. Attenuazione degli attacchi DDoS: è possibile limitare le richieste in arrivo e il numero di connessioni per singolo indirizzo IP a un valore tipico per gli utenti normali. Nginx consente inoltre di bloccare o limitare l'accesso in base alla posizione del client e al valore delle intestazioni della richiesta come "User-Agent" e "Referer".
Questo articolo descrive i passaggi necessari per la configurazione di Nginx come proxy inverso.
Prerequisiti
Supponiamo che tu abbia Nginx installato sul tuo server Ubuntu, CentOS o Debian.
Utilizzo di Nginx come proxy inverso
Per configurare Nginx come proxy inverso a un server HTTP, aprire il file di configurazione del blocco server del dominio e specificare una posizione e un server proxy al suo interno:
server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }
L'URL del server proxy viene impostato utilizzando la direttiva
proxy_pass
e può utilizzare
HTTP
o
HTTPS
come protocollo, nome di dominio o indirizzo IP e una porta e URI opzionali come indirizzo.
La configurazione sopra dice a Nginx di passare tutte le richieste alla posizione
/app
al server proxy su
http://127.0.0.1:8080
.
/etc/nginx/sites-available
, mentre su CentOS nella directory
/etc/nginx/conf.d
.
Per illustrare meglio il funzionamento
location
direttive
location
e
proxy_pass
, prendiamo il seguente esempio:
server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }
Se un visitatore accede a
http://example.com/blog/my-post
, Nginx inoltra questa richiesta a
http://node1.com:8000/wordpress/my-post
.
Quando l'indirizzo del server proxy contiene un URI, (
/wordpress/
), l'URI di richiesta che viene passato al server proxy viene sostituito da un URI specificato nella direttiva. Se l'indirizzo del server proxy viene specificato senza un URI, l'URI della richiesta completa viene passato al server proxy.
Passare le intestazioni di richiesta
Quando Nginx inoltra una richiesta, definisce automaticamente due campi di intestazione in richieste proxy dal client,
Host
e
Connection
e rimuove le intestazioni vuote.
Host
è impostato sulla variabile
$proxy_host
e la
Connection
è impostata per chiudere.
Per regolare o impostare le intestazioni per le connessioni proxy, utilizzare la direttiva
proxy_set_header
, seguita dal valore dell'intestazione. Puoi trovare un elenco di tutte le intestazioni di richiesta disponibili e i loro valori consentiti qui. Se si desidera impedire che un'intestazione venga passata al server proxy, impostarla su una stringa vuota
""
.
Nel seguente esempio, stiamo cambiando il valore del campo di intestazione
Host
in
$host
e rimuovendo il campo di intestazione
Accept-Encoding
impostando il suo valore su una stringa vuota.
location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }
Ogni volta che si modifica il file di configurazione, è necessario riavviare il servizio Nginx per rendere effettive le modifiche.
Configurazione di Nginx come proxy inverso su un server proxy non HTTP
Per configurare Nginx come proxy inverso a un server proxy non HTTP, è possibile utilizzare le seguenti direttive:
-
fastcgi_pass
- proxy inverso a un server FastCGI.uwsgi_pass
- proxy inverso a un server uwsgi.scgi_pass
- proxy inverso a un server SCGI.memcached_pass
- proxy inverso a un server Memcached.
Uno degli esempi più comuni è usare Nginx come proxy inverso a PHP-FPM:
server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
Opzioni comuni di proxy inverso Nginx
La pubblicazione di contenuti su HTTPS è diventata uno standard al giorno d'oggi. In questa sezione, ti forniremo un esempio di configurazione del proxy inverso Nginx HTTPS, inclusi i parametri e le intestazioni del proxy Nginx consigliati.
location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }
-
proxy_http_version 1.1
- Definisce la versione del protocollo HTTP per il proxy, per impostazione predefinita è impostata su 1.0. Per connessioni Web ekeepalive
è necessario utilizzare la versione 1.1.proxy_cache_bypass $http_upgrade
- Imposta le condizioni alle quali la risposta non verrà presa da una cache.Upgrade $http_upgrade
eConnection "upgrade"
: questi campi di intestazione sono obbligatori se l'applicazione utilizza Websocket.Host $host
: la variabile$host
nel seguente ordine di precedenza contiene: nome host dalla riga della richiesta o nome host dal campo dell'intestazione della richiestaHost
o il nome del server corrispondente a una richiesta.X-Real-IP $remote_addr
- Inoltra l'indirizzo IP remoto del visitatore reale al server proxy.X-Forwarded-For $proxy_add_x_forwarded_for
- Un elenco contenente gli indirizzi IP di ogni server a cui è stato inviato il proxy.X-Forwarded-Proto $scheme
: se utilizzato all'interno di un blocco server HTTPS, ogni risposta HTTP dal server proxy viene riscritta inX-Forwarded-Host $host
: definisce l'host originale richiesto dal client.X-Forwarded-Port $server_port
- Definisce la porta originale richiesta dal client.
Conclusione
Hai imparato a usare Nginx come proxy inverso. Ti abbiamo anche mostrato come passare parametri aggiuntivi al server e come modificare e impostare diversi campi di intestazione nelle richieste proxy.
nginxWiMax Forum Impostazione del laboratorio di certificazione in India

Il WiMax Forum sta creando un laboratorio di certificazione in India in seguito alla decisione del governo locale di mettere all'asta lo spettro per ...
Tata Impostazione data center a Londra

India Tata Communications continua l'espansione fuori dall'India con un nuovo data center nel Regno Unito.
Configura odoo con nginx come proxy inverso

Odoo viene fornito con un server Web incorporato, ma nella maggior parte dei casi si consiglia di avere un proxy inverso di fronte che fungerà da intermediario tra i client e il server Odoo. Questa guida fornisce istruzioni su come utilizzare Nginx come proxy inverso per Odoo.