nginx reverzni proxy

Kako da instalirate i podesite Nginx kao reverzni proksi server

22 фебруара, 2021

U jednom od prošlih tekstova smo objasnili kako da instalirate Nginx na Linux-u. U ovom tekstu ćemo objasniti kako da instalirate i podesiti Nginx reverzni proksi server. Takođe ćemo objasniti kako reverzni proksi server radi i koje su mu prednosti. Na kraju ćemo predstaviti neke od opcija za konfiguraciju koje Linux administratori najčešće primenjuju na svojim reverznim proksi serverima.

Kako reverzni proksi server radi?

Sistem koji se nalazi između klijenta i veb-servera (jednog ili više) može biti konfigurisan kao reverzni proksi. Proksi servis se ponaša kao front-end i upravlja svim dolaznim zahtevima klijenta koje zatim distribuira ka back-end-u, bazi podataka i/ili drugim serverima.

Prednosti reverznog proksi servera

Konfigurisanje Nginx servera kao reverznog proksi servera znači da će se svim dolaznim zahtevima upravljati sa jednog mesta, što ima nekoliko prednosti:

Uravnoteženje opterećenja (load balancing)
Reverzni proksi distribuira dolazne konekcije do back-end servera prema trenutnom opterećenju servera. Time je osigurano da nijedan od back-end servera ne bude preopterećen zahtevima. To takođe sprečava da dođe do downtime-a, jer reverzni proksi može da iznova rutira saobraćaj ako neki od back-end servera padne.

Centralizovano logovanje
Umesto više servera sa različitim log fajlovima, reverzni proksi može da loguje sve relevantne informacije na jednoj lokaciji. To olakšava posao administratorima, jer potencijalni problemi mogu biti mnogo lakše detektovani bez potrebe za parsiranjem log fajlova sa različtih lokacija.

Poboljšana sigurnost
Reverzni proksi će sakriti informaciju o vašim back-end serverima, praveći na taj način prvu liniju odbrane od napada. Imajući u vidu da on filtrira saobraćaj pre nego ga prosledi ka back-end-u, propustiće samo saobraćaj koji je detektoao kao bezbedan.

Bolje performanse
Reverzni proksi server može da upravlja načinom na koji raspoređuje opterećenje prema back-end serverima, što za cilj ima kraće vreme odziva. Pored toga on može da upravlja i keširanjem i kompresijom, što dovodi do oslobađanja resursa na stgrani back-end servera.

Kako da podesite Nginx reverzni proxy server

Sada ćemo objasniti kako da u 4 jednostavna koraka instalirate Nginx reverzni proksi:

Instalirajte Nginx

Možete da instalirate Nginx uz pomoć vašeg sistemskog package manager-a. Na Ubuntu i Debian distribucijama komanda je:
$ sudo apt-get install nginx

Na CentOS i Red Hat distribucijama:
# yum install nginx

Onemogućite podrazumevani virtual host
# unlink /etc/nginx/sites-enabled/default

Kreirajte konfiguracioni fajl za reverzni proksi

Sva podešavanja za reverzni proksi se nalaze unutar konfiguracionog fajla i taj fajl treba da bude smešten unutar dostupnog direktorijuma. Idite prvo do sledećeg direktorijuma:
# cd /etc/nginx/sites-available
Zatim upotrebite vi (visual editor) ili neki drugi tekst editor po vašem izboru da kreirate konfiguracioni fajl:
# vi reverse-proxy.conf
Zatim zalepite ovaj konfiguracioni template u tek kreirani konfiguracioni fajl

server {
listen 80;
location /some/path/ {
proxy_pass http://example.com;
}
}

Zamenite example.com sa IP adresom ili nazivom (host-name) servera na koji ćete prosleđivati zahteve. Takođe možete mu dodeliti i port sa nazivom hosta/servera kao npr. 127.0.0.1:8080. Ne zaboravite da na kraju sačuvate promene i zatvorite tekst editor.

Imajte u vidu da će ovo raditi na HTTP serverima, ali Nginx takođe podržava i druge protokole.

Omogućite proksi

Sada kada ste sačuvali podešavanja, omogućite novu konfiguraciju kreiranjem linka ka pomenutom direktorijumu:

# ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf

Podešavanje za servere koji nisu HTTP:

Primer iznad pokazuje kako da prosledite zahtev HTTP serveru, ali je takođe moguće da podesiti Nginx da se ponaša kao reverzni proksi za FastCGI, uwsgi, SCGI i memcached. Umesto da koristite proxy_pass naredbu (kao u prethodnom primeru), koristite njenu odgovarajuću varijaciju:

proxy_pass (HTTP server - kao što je već prikazano)
fastcgi_pass (FastCGI server)
uwsgi_pass (uwsgi server)
scgi_pass (SCGI server)
memcached_pass (memcached server)

Kako da prosledite header-e

Da biste podesili koje header-e će reverzni proksi server da prosledi drugim serverima / drugom serveru, možete da ih definišete u konfiguracionom fajlu koji ste već napravili. Koristite naredbu proxy_set_header da biste podesili header-e:

location /some/path/ {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://example.com;
}

Na primeru iznad smo definisali tri tipa header-a i podesili ih prema određenim pravilima. Postoje i druge opcije za prosleđivanje header-a, ali ovaj primer pokazuje tri načina koja se često koriste.

Kako da konfigurišete uravnoteženje opterećenja (load balancing)

Jedan od najčešćih razloga za instalaciju reverznog proksi servera jeste upravo potreba za uravnoteženjem opeterećenja na serverima. Možemo započeti dodavanjem nekoliko linija u konfiguracioni fajl koji smo ranije kreirali. Evo jednog primera:

upstream backend_servers {
server host1.example.com;
server host2.example.com;
server host3.example.com;
}

server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}

Ovde smo dodali backend_servers. Unutar toga smo u svakoj liniji naveli hostname/IP adresu svakog servera. U naredbi proxy_pass gde bismo inače uneli hostname ili IP adresu, uneli smo backend_servers.

Ovako konfigurisan server će po round-robin algoritmu (RR) prosleđivati dolazne zahteve upućene ka example.com na tri različita hosta koja smo naveli u prethodnom primeru.

Konfigurisanje algoritama za uravnoteženje opterećenja

Kao što smo pomenuli round-robin je podrazumevani algoritam po kojem će Nginx rotirati zahteve za prosleđivanje. Postoje i neki drugi algoritmi koji u određenim situacijama mogu biti prikladniji za ovu namenu:

least_conn – distribuira dolazne konekcije to back-end srevera na osnovu postojećeg broja njihovih aktivnih konekcija. Server će primiti zahtev samo u slučaju da ima najmanji broj konekcija u tom trenutku. Ovo je posebno od koristi koje zahtevaju dugotrajne konekcije servera sa klijentom.

ip_hash – distribuira dolazne konekcije na osnovu IP adrese klijenta. Ovo je korisno ukoliko treba da kreirate konekcije koje su vezane za određene sesije.
hash – distribuira dolazne konekcije na osnovu hash ključa. Ovo je konkretno korisno kod memcached hosta.

Dakle, uravnoteženje opterećenja biste u ovom slučaju mogli da konfigurišete na sledeći način:

upstream backend_servers {
least_conn;
server host1.example.com;
server host2.example.com;
server host3.example.com;
}

Kako da testirate Nginx konfiguraciju

Odmah nakon editovanja .conf fajla, trebalo bi uvek da testirate svoju konfiguraciju na moguće greške, a zatim da restartujete Nginx.

# service nginx configtest
# service nginx restart

U ovom tekstu smo objasnili kako da instalirate i podesite Nginx kao reverzni proksi server. Ukoliko ste pratili sve navedene korake, trebalo bi da je podešavanje prošlo bez problema, i vaš veb-server bi trebalo da je sada značajno brži nego pre.

Slični postovi:

Kako da instalirate Nginx na Linux-u
Litespeed server – prednosti i mane

Bez komentara

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *