Android

Postavljanje nginx obrnutog proxyja

GITHUB ATOM - Why Atom.io will be your favorite Text Editor!

GITHUB ATOM - Why Atom.io will be your favorite Text Editor!

Sadržaj:

Anonim

Obrnuti proxy je usluga koja uzima zahtjev klijenta, šalje zahtjev na jedan ili više proxy poslužitelja, dohvaća odgovor i isporučuje klijentov odgovor klijentu.

Zbog svojih performansi i skalabilnosti, NGINX se često koristi kao obrnuti proxy za HTTP i ne-HTTP poslužitelje. Tipična obrnuta konfiguracija proxyja je staviti Nginx ispred Node.js, Python ili Java aplikacija.

Korištenje Nginx-a kao obrnutog proxyja pruža vam nekoliko dodatnih prednosti:

  • Load Balancing - Nginx može izvesti uravnoteženje opterećenja radi distribucije zahtjeva klijenata na proxy poslužiteljima, što poboljšava performanse, skalabilnost i pouzdanost. Predmemoriranje - Uz Nginx kao obrnuti proxy možete spremiti unaprijed spremljene verzije stranica kako biste ubrzali vrijeme učitavanja stranica. Djeluje tako da kešira sadržaj primljen iz odgovora proxy poslužitelja i koristi ga za odgovaranje klijentima bez potrebe da svaki put kontaktira proxy poslužitelj za isti sadržaj. Prekid SSL - Nginx može djelovati kao SSL krajnja točka za veze s klijentima. Rukovat će i dešifrirati dolazne SSL veze i šifrirati odgovore proxy poslužitelja. Kompresija - Ako proxy poslužitelj ne šalje komprimirane odgovore, možete konfigurirati Nginx da komprimira odgovore prije nego što ih pošalje klijentima. Ublažavanje DDoS napada - Dolazne zahtjeve i broj veza po jednoj IP adresi možete ograničiti na vrijednost tipičnu za redovne korisnike. Nginx vam također omogućuje blokiranje ili ograničavanje pristupa na temelju lokacije klijenta i vrijednosti zaglavlja zahtjeva, poput "User-Agent" i "Referer".

U ovom su članku opisani koraci potrebni za konfiguriranje Nginxa kao obrnutog proxyja.

Preduvjeti

Pretpostavljamo da ste na vašem Ubuntu, CentOS ili Debian poslužitelju instalirali Nginx.

Korištenje Nginxa kao obrnutog proxyja

Da biste konfigurirali Nginx kao obrnuti proxy na HTTP poslužitelju, otvorite datoteku konfiguracijske datoteke bloka poslužitelja i unutar nje odredite lokaciju i proxy poslužitelj:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

URL proxy poslužitelja je postavljen pomoću proxy_pass direktive i može koristiti HTTP ili HTTPS kao protokol, naziv domene ili IP adresu i neobavezni port i URI kao adresu.

Gornja konfiguracija upućuje Nginx da proslijedi sve zahtjeve na /app lokaciju proxy poslužitelju na http://127.0.0.1:8080 .

U distribucijama temeljenim na Ubuntu i Debianu datoteke blokova poslužitelja spremaju se u /etc/nginx/sites-available , dok se u CentOS u /etc/nginx/conf.d direktoriju.

Da bismo bolje ilustrirali kako proxy_pass direktive o location i proxy_pass , uzmimo sljedeći primjer:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Ako posjetitelj pristupi http://example.com/blog/my-post , Nginx će taj zahtjev proslijediti na http://node1.com:8000/wordpress/my-post .

Kad adresa proxy poslužitelja sadrži URI, ( /wordpress/ ), URI zahtjeva koji se prosljeđuje poslužitelju zamjenjuje URI navedenim u direktivi. Ako je adresa proxy poslužitelja navedena bez URI-ja, potpuni URI zahtjeva prosljeđuje se proxy-poslužitelju.

Prolazak zaglavlja zahtjeva

Kad Nginx posreduje zahtjevu, automatski definira dva polja zaglavlja u proxy zahtjevima klijenta, Host i Connection i uklanja prazna zaglavlja. Host je postavljen na varijablu $proxy_host , a Connection je zatvorena.

Da biste prilagodili ili postavili zaglavlja za proxy veze, koristite direktivu proxy_set_header , nakon čega slijedi vrijednost zaglavlja. Ovdje možete pronaći popis svih dostupnih zaglavlja zahtjeva i njihovih dopuštenih vrijednosti. Ako želite spriječiti prosljeđivanje zaglavlja na proxy poslužitelju, postavite ga u prazan niz "" .

U sljedećem primjeru mijenjamo vrijednost polja zaglavlja Host u $host i uklanjamo polje zaglavlja Accept-Encoding postavljanjem njegove vrijednosti u prazan niz.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Kad god izmijenite konfiguracijsku datoteku, morate ponovo pokrenuti Nginx uslugu da bi promjene stupile na snagu.

Konfiguriranje Nginxa kao obrnutog proxyja na ne-HTTP proxy poslužitelju

Da biste konfigurirali Nginx kao obrnuti proxy na ne-HTTP proxy poslužitelju, možete koristiti sljedeće direktive:

  • fastcgi_pass - povratni proxy na FastCGI poslužitelj. uwsgi_pass - preokrenuti proxy na uwsgi poslužitelj. scgi_pass - preokrenuti proxy na SCGI poslužitelj. memcached_pass - preokrenuti proxy na memcached_pass poslužitelj.

Jedan od najčešćih primjera je korištenje Nginx-a kao obrnutog proxyja za PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Uobičajene opcije za povratne proxy Nginx

Posluživanje sadržaja putem HTTPS-a postalo je standard u današnje vrijeme. U ovom ćemo dijelu dati primjer HTTPS Nginx konfiguracije proxy proxyja, uključujući preporučene Nginx proxy parametre i zaglavlja.

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 - Definira verziju HTTP protokola za približavanje, prema zadanim postavkama postavljenu na 1, 0. Za Websockets i keepalive veze trebate koristiti verziju 1.1. proxy_cache_bypass $http_upgrade - Postavlja uvjete pod kojima odgovor neće biti uzet iz predmemorije. Upgrade $http_upgrade i Connection "upgrade" - ova Upgrade $http_upgrade polja obavezna su ako vaša aplikacija koristi Websockets. Host $host - Promjena $host u sljedećem redoslijedu prioriteta sadrži: ime hosta iz retka zahtjeva ili ime računala iz polja zaglavlja zahtjeva Host ili naziv poslužitelja koji odgovara zahtjevu. X-Real-IP $remote_addr - X-Real-IP $remote_addr stvarnu udaljenu IP adresu proxy poslužitelja. X-Forwarded-For $proxy_add_x_forwarded_for - Popis koji sadrži IP adrese svakog poslužitelja kroz koji se klijent proxy. X-Forwarded-Proto $scheme - Kada se koristi unutar bloka HTTPS poslužitelja, svaki HTTP odgovor proxyed poslužitelja prepisuje se na X-Forwarded-Host $host - Definira izvorni host koji zahtijeva klijent. X-Forwarded-Port $server_port - Definira izvorni port koji traži klijent.

Zaključak

Naučili ste kako koristiti Nginx kao obrnuti proxy. Također smo vam pokazali kako proslijediti dodatne parametre na poslužitelju te mijenjati i postavljati različita polja zaglavlja u proxied zahtjevima.

Nginx