Configuring nginx as a reverse proxy for web application
Cuprins:
- Cerințe preliminare
- Utilizarea Nginx ca proxy invers
- Trecerea anteturilor cererii
- Configurarea Nginx ca proxy invers pentru un server proxiat non-HTTP
- Opțiuni comune pentru proxy invers Nginx
- Concluzie
Un proxy invers este un serviciu care preia o solicitare a clientului, trimite cererea către unul sau mai multe servere proxy, preia răspunsul și furnizează răspunsul serverului către client.
Datorită performanței și scalabilității sale, NGINX este adesea folosit ca proxy invers pentru serverele HTTP și non-HTTP. O configurație tipică de proxy invers este de a pune Nginx în fața aplicațiilor Node.js, Python sau Java.
Utilizarea Nginx ca proxy invers vă oferă mai multe avantaje:
- Bilanțarea sarcinii - Nginx poate efectua echilibrarea sarcinii pentru a distribui solicitările clienților pe serverele proxy, care îmbunătățesc performanța, scalabilitatea și fiabilitatea. Caching - Cu Nginx ca proxy invers, puteți cache versiunile pre-redate ale paginilor pentru a accelera timpul de încărcare a paginii. Funcționează prin punerea în cache a conținutului primit de la răspunsurile serverelor proxied și folosirea acestuia pentru a răspunde clienților fără a fi nevoie să contacteze serverul proxied pentru același conținut de fiecare dată. Terminare SSL - Nginx poate acționa ca un punct SSL pentru conexiunile cu clienții. Acesta va trata și decripta conexiunile SSL de intrare și va cripta răspunsurile serverului proxied. Compresie - Dacă serverul proxied nu trimite răspunsuri comprimate, puteți configura Nginx pentru a comprima răspunsurile înainte de a le trimite clienților. Atenuarea atacurilor DDoS - Puteți limita solicitările primite și numărul de conexiuni pe fiecare adresă IP la o valoare tipică pentru utilizatorii obișnuiți. Nginx vă permite, de asemenea, să blocați sau să restricționați accesul în funcție de locația clientului și de valoarea anteturilor cererii, cum ar fi „User-Agent” și „Referer”.
Acest articol prezintă pașii necesari pentru configurarea Nginx ca proxy invers.
Cerințe preliminare
Presupunem că aveți Nginx instalat pe serverul dvs. Ubuntu, CentOS sau Debian.
Utilizarea Nginx ca proxy invers
Pentru a configura Nginx ca proxy invers pentru un server HTTP, deschideți fișierul de configurare al blocului de server al domeniului și specificați o locație și un server proxied în interiorul acestuia:
server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }
Adresa URL a serverului proxy este setată folosind directiva
proxy_pass
și poate utiliza
HTTP
sau
HTTPS
ca protocol, nume de domeniu sau adresă IP și un port opțional și URI ca adresă.
Configurația de mai sus spune Nginx să treacă toate cererile către locația
/app
către serverul proxied la
http://127.0.0.1:8080
.
/etc/nginx/sites-available
, în directorul CentOS în
/etc/nginx/conf.d
.
Pentru a ilustra mai bine cum funcționează directivele privind
location
și
proxy_pass
, să luăm următorul exemplu:
server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }
Dacă un vizitator accesează
http://example.com/blog/my-post
, Nginx va trimite această solicitare către
http://node1.com:8000/wordpress/my-post
.
Când adresa serverului proxied conține un URI, (
/wordpress/
), URI-ul de solicitare care este transmis serverului proxy a fost înlocuit de un URI specificat în directivă. Dacă adresa serverului proxied este specificată fără un URI, URI-ul complet al cererii este transmis serverului proxied.
Trecerea anteturilor cererii
Când Nginx proxiește o solicitare, definește automat două câmpuri de antet într-o solicitare proxiedă de la client,
Host
și
Connection
și elimină anteturile goale.
Host
este setată la variabila
$proxy_host
, iar
Connection
este setată să se închidă.
Pentru a ajusta sau seta anteturile pentru conexiunile proxy, utilizați directiva
proxy_set_header
, urmată de valoarea antetului. Puteți găsi o listă cu toate anteturile de solicitare disponibile și valorile permise aici. Dacă doriți să împiedicați trecerea unui antet pe serverul proxied, setați-l pe un șir gol
""
.
În următorul exemplu, schimbăm valoarea câmpului antet de
Host
în
$host
și eliminăm câmpul antet
Accept-Encoding
setând valoarea acestuia pe un șir gol.
location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }
Ori de câte ori modificați fișierul de configurare, trebuie să reporniți serviciul Nginx pentru ca modificările să aibă efect.
Configurarea Nginx ca proxy invers pentru un server proxiat non-HTTP
Pentru a configura Nginx ca proxy invers pentru un server proxiat non-HTTP, puteți utiliza următoarele directive:
-
fastcgi_pass- proxy invers pentru un server FastCGI.uwsgi_pass- proxy invers pentru un server uwsgi.scgi_pass- proxy invers pentru un server SCGI.memcached_pass- proxy invers pentru un server Memcached.
Unul dintre cele mai frecvente exemple este utilizarea Nginx ca proxy invers pentru PHP-FPM:
server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
Opțiuni comune pentru proxy invers Nginx
Servirea conținutului prin HTTPS a devenit un standard în zilele noastre. În această secțiune, vă vom oferi un exemplu de configurare proxy inversă HTTPS Nginx incluzând parametrii și anteturile proxy Nginx recomandate.
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- Definește versiunea protocolului HTTP pentru proxying, implicit setată la 1.0. Pentru conexiuni Web și conexiuni de tip Keepalive, trebuie să utilizați versiunea 1.1.proxy_cache_bypass $http_upgrade- Setează condițiile în care răspunsul nu va fi preluat dintr-un cache.Upgrade $http_upgradeșiConnection "upgrade"- Aceste câmpuri antet sunt necesare dacă aplicația dvs. utilizează Websockets.Host $host- Variabila$hostîn ordinea de prioritate următoare conține: numele de gazdă de la linia de solicitare sau numele de gazdă din câmpul antet de cerereHostsau numele serverului care se potrivește cu o solicitare.X-Real-IP $remote_addr-X-Real-IP $remote_addradresa IP de la distanță a vizitatorului real către serverul proxied.X-Forwarded-For $proxy_add_x_forwarded_for- A fostX-Forwarded-For $proxy_add_x_forwarded_foro listă care conține adresele IP ale fiecărui server prin care a fost trimis clientul.X-Forwarded-Proto $scheme- Când este utilizat în interiorul unui bloc de server HTTPS, fiecare răspuns HTTP de pe serverul proxied este rescris înX-Forwarded-Host $host- definește gazda originală solicitată de client.X-Forwarded-Port $server_port- definește portul inițial solicitat de client.
Concluzie
Ați învățat cum să utilizați Nginx ca proxy invers. V-am arătat, de asemenea, cum să treceți parametri suplimentari către server și cum să modificați și să setați diferite câmpuri de antet în cererile proxy.
NginxConfigurarea, configurarea, utilizarea serverului de cartofi la distanță: Tutorial detaliat al imaginii
Utilizați serverul de cartofi la distanță pe Windows 7.
Configurați odoo cu nginx ca proxy invers
Odoo vine cu un server web încorporat, dar, în cele mai multe cazuri, este recomandat să aveți un proxy invers în fața acestuia, care va acționa ca un intermediar între clienți și serverul Odoo. Acest ghid oferă instrucțiuni despre cum să utilizați Nginx ca proxy invers pentru Odoo.
Configurarea și configurarea unui server de e-mail
În această serie, vă vom arăta cum puteți configura un sistem complet de e-mail virtual pentru utilizatori pe un server Ubuntu.







