Nginx

Nginx obrnuti proxy

Nginx obrnuti proxy

Što je obrnuti proxy?

Proxy poslužitelj je onaj koji u vaše ime razgovara s Internetom. Na primjer, ako je mreža vašeg fakulteta blokirala https: // www.facebook.com / ali domena https: // exampleproxy.com i dalje dostupan, a zatim možete posjetiti potonji i on će proslijediti sve vaše zahtjeve za Facebook poslužitelje na Facebook, a odgovore s Facebooka poslati natrag u vaš preglednik.

Da rezimiramo, proxy šalje zahtjeve u ime jednog od više klijenata na bilo koji poslužitelj na Internetu. Obrnuti proxy ponaša se na sličan način.

A obrnuti proxy prima zahtjev od bilo kojeg klijenta u ime jednog ili više klijenata poslužitelji. Dakle, ako imate nekoliko poslužitelja koji hostuju ww1.primjer.com i ww2.primjer.com obrnuti proxy poslužitelj može prihvatiti zahtjeve u ime dvaju poslužitelja, prosljeđivati ​​ih u odgovarajuće krajnje točke na kojima se generira odgovor i vraća natrag obrnutom proxyju kako bi se proslijedio natrag klijentima.

Postava

Prije nego što počnemo dotjerivati ​​Nginx konfiguracijske datoteke i napravimo obrnuti proxy poslužitelj. Želim postaviti u kamen kako izgleda moja postavka, pa kad pokušavate implementirati svoj dizajn, to bi bilo manje zbunjujuće.

Koristio sam platformu DigitalOcean za okretanje tri VPS-a. Svi su u istoj mreži, svaki sa svojim privatnim IP-om, a samo jedan VPS ima statički javni IP (ovo će biti naš obrnuti proxy poslužitelj.)

VM / Ime hosta Privatna IP Javna IP Uloga
Reversproxy 10.135.123.187 159.89.108.14 Obrnuti proxy, pokrenut Nginx
Čvor-1 10.135.123.183 N / A Pokretanje prve web stranice
Čvor-2 10.135.123.186 N / A Pokretanje drugog web mjesta

Dvije različite web stranice koje se izvode imaju nazive domena ww1.ranvirslog.com i ww2.ranvirslog.com i oba njihova A zapisa ukazuju na javni IP obratnog proxyja, tj.e, 159.89.108.14

Ideja iza privatne IP-a je da tri VM-a mogu međusobno razgovarati putem ove privatne IP-e, ali udaljeni korisnik može pristupiti samo obrnutom proxy VM-u na svom javnom IP-u. Ovo je važno imati na umu. Na primjer, ne možete upasti u bilo koji VM pomoću njegove privatne IP adrese.

Nadalje, i Node-1 i Node-2 imaju Apache web poslužitelj koji poslužuje dvije različite web stranice. To će nam pomoći da razlikujemo jedno od drugog.

Na prvom web mjestu stoji „WEBSITE 1 WORKS!!!"

Slično tome pokazuje i druga web stranica:

Vaše se web stranice mogu razlikovati, ali ako želite postaviti ovu postavku kao početnu točku, pokrenite apt install apache2 na Node-1 i Node-2. Zatim uredite datoteku / var / www / html / index.html tako da web poslužitelj kaže sve što želite.

VM reverseproxy još uvijek nije netaknut. Svi VM-ovi imaju Ubuntu 18.04 LTS, ali možete koristiti bilo koji drugi OS koji želite. To možete čak oponašati i pomoću Dockerovih spremnika. Stvaranjem korisnički definirane mreže Docker mostova i mriješćenjem spremnika na njoj, svakom spremniku možete dodijeliti privatnu IP adresu i proslijediti sav HTTP / HTTPS proxy u jedan spremnik, koji bi bio naš Nginxov obrnuti proxy spremnik.

Zasada je dobro.

Zadana konfiguracija Nginxa

Počnimo s instaliranjem Nginxa na reverseproxy poslužitelj, ja koristim Ubuntu, tako da je apt moj upravitelj paketa:

$ sudo apt instalirati nginx

Uklanjanje zadane konfiguracije ako koristite distribuciju zasnovanu na Debianu

Prije nego što nastavimo dalje, mala napomena o Nginxovoj konfiguraciji. Sve različite konfiguracijske datoteke pohranjene su u / etc / nginx, uključujući nginx.conf datoteka koja je glavna konfiguracijska datoteka. Ako pogledamo sadržaj ove datoteke (unutar http bloka), primijetit ćete sljedeća dva retka:

..
uključuju / etc / nginx / conf.d / *.conf;
uključuju / etc / nginx / sites-enabled / *;
..

Drugi redak uključuje sve datoteke u direktoriju s omogućenim web lokacijama u konfiguraciji Nginxa. Ovo je standardna praksa u većini distribucija temeljenih na Debianu. Na primjer, zadana web stranica "Dobrodošli u Nginx" ima odgovarajuću datoteku koja se zove default na lokaciji / etc / nginx / sites-available / default sa simboličkom vezom na / etc / nginx / sites-enabled /, ali ovo nam nije potrebno zadana web stranica kako bismo mogli sigurno ukloniti simboličku vezu. Izvornik je i dalje dostupan u direktoriju dostupnom na web lokacijama.

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

Ali kada ćemo stvoriti obrnutu proxy konfiguraciju, učinit ćemo to u conf.d direktorij (s našim imenom datoteke koja ima .proširenje conf) ovo je univerzalno, i radi u svim distribucijama, ne samo u Debianu ili Ubuntuu.

Uklanjanje zadane konfiguracije za druge distribucije

Ako ne koristite distro baziran na Debianu, pronaći ćete zadani Stranica dobrodošlice konfiguracija na / etc / nginx / conf.d / zadano.conf samo premjestite datoteku na neko sigurno mjesto ako je želite koristiti u budućnosti (jer ovo nije simbolična veza)

$ mv / etc / nginx / conf.d / zadano.conf ~ / zadani.konf

Ponekad se može naći u / etc / nginx / default.d jer se ljudi jednostavno ne mogu složiti oko jednog jednostavnog standarda! Dakle, morali biste malo kopati po direktoriju / etc / nginx da biste to shvatili.

Dodavanje blokova obrnutog proxyja

Kao što je već rečeno, dva različita imena domena koje hostiram iza ovog proxyja su

  1. ranvirslog.com (WEB STRANICA 1) s IP 10.135.123.183
  2. ranvirslog.com (WEB STRANICA 2) s IP 10.135.123.186

Pa kreirajmo jednu datoteku po web mjestu u / etc / nginx / conf.d / mapa. Dakle, dobro smo organizirani.

$ touch / etc / nginx / conf.d / ww1.konf
$ touch / etc / nginx / conf.d / w2.konf

Datotekama možete dati imena kako god želite, pod uvjetom da imaju .conf na kraju svog imena.

U prvoj datoteci ww1.conf dodajte sljedeće retke:

poslužitelj
slušati 80;
poslušajte [::]: 80;
 
ime_poslužitelja ww1.ranvirslog.com;
 
lokacija /
proxy_pass http: // 10.135.123.183 /;
isključeno proxy_buffering;
proxy_set_header X-Real-IP $ remote_addr;

Izjave Listen govore Nginxu da sluša na priključku 80 i za IPv4 i za IPv6 slučajeve. Zatim provjerava je li ime_poslužitelja ww1.ranvirslog.com tada blok lokacije pokreće i proksira zahtjev za http: // 10.135.123.183 / s isključenim međuspremnikom. Štoviše, linija proxy_set_header ... osigurava prosljeđivanje izvorne IP adrese klijenta proksiranom poslužitelju. Ovo je korisno u slučaju da želite izračunati broj jedinstvenih posjetitelja itd. Inače bi proksirani poslužitelj imao samo jednog posjetitelja - Nginx poslužitelj.

Opcije međuspremnika i opcije set_header potpuno su neobavezne i dodane su samo kako bi proxyjiranje bilo što transparentnije. Za ww2.ranvirslog.com web mjestu, dodao sam sljedeću konfiguraciju na / etc / nginx / conf.d / w2.conf:

poslužitelj
slušati 80;
poslušajte [::]: 80;
 
ime_poslužitelja ww2.ranvirslog.com;
 
lokacija /
proxy_pass http: // 10.135.123.186 /;
isključeno proxy_buffering;
proxy_set_header X-Real-IP $ remote_addr;

Spremite obje datoteke i provjerite je li cjelokupna konfiguracija valjana ili ne:

$ sudo nginx -t

Ako postoje pogreške, izlaz gornje naredbe pomoći će vam da ih pronađete i popravite. Sada ponovo pokrenite poslužitelj:

$ service nginx restart

A možete provjeriti radi li ili ne tako da posjetite različita imena domena u pregledniku i vidite rezultat.

Zaključak

Slučaj upotrebe svakog pojedinca je različit. Gore navedena konfiguracija možda će trebati malo prilagoditi kako bi funkcionirala za vaš scenarij. Možda koristite više poslužitelja na istom hostu, ali na različitim priključcima, u tom će slučaju vrijednost proxy_pass ... imati vrijednost http: // localhost: portNumber /.

Ovi detalji vrlo ovise o vašem slučaju korištenja. Za daljnje pojedinosti o ostalim opcijama i prilagodbama pogledajte službene Nginx dokumente.

OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...