Čo je reverzný proxy server?
Proxy server je server, ktorý vo vašom mene komunikuje s internetom. Napríklad ak sieť vašej univerzity zablokovala https: // www.Facebook.com / ale doména https: // exampleproxy.com je stále prístupný, potom môžete navštíviť tento server a ten prepošle všetky vaše požiadavky na servery Facebook na Facebook a prostredníctvom odpovedí z Facebooku pošle späť do vášho prehliadača.
Rekapitulácia: proxy server odosiela žiadosti v mene jedného alebo viacerých klientov na všetky servery v sieti Internet. Podobne sa chová aj reverzný proxy server.
A reverzný proxy prijíma žiadosti od všetkých klientov v mene jedného alebo viacerých servery. Takže ak máte niekoľko serverov hostiacich ww1.príklad.com a 2.sv.v.príklad.com reverzný proxy server môže prijímať požiadavky v mene týchto dvoch serverov, preposielať tieto požiadavky na ich príslušné koncové body, kde sa generuje odpoveď, a poslať späť na reverzný proxy server, aby sa preposlal späť klientom.
Nastavenie
Než začneme vylepšovať konfiguračné súbory Nginx a vytvoríme reverzný proxy server. Chcem vytesať, ako vyzerá moje nastavenie, takže keď sa snažíte implementovať svoj návrh, bolo by to menej mätúce.
Použil som platformu DigitalOcean na roztočenie troch VPS. Všetci sú v rovnakej sieti a každá má svoju vlastnú súkromnú IP a iba jedna VPS má statickú verejnú IP (toto bude náš reverzný proxy server).)
VM / Hostname | Súkromná IP | Verejná IP | Rola |
Reverznej oxyskupiny | 10.135.123.187 | 159.89.108.14 | Reverzný proxy server, spustený Nginx |
Uzol-1 | 10.135.123.183 | N / A | Spustená prvá webová stránka |
Uzol-2 | 10.135.123.186 | N / A | Prevádzkovaná druhá webová stránka |
Dva rôzne spustené webové stránky majú názvy domén druhá svetová vojna.ranvirslog.com a druhá svetová vojna.ranvirslog.com a obidva ich záznamy A poukazujú na verejnú IP adresu reverznej hydroxyskupiny, t.j.e, 159.89.108.14
Myšlienka súkromnej IP spočíva v tom, že tieto tri VM môžu medzi sebou komunikovať prostredníctvom tejto súkromnej IP, ale vzdialený používateľ má prístup iba k reverznému proxy VM na jeho verejnom IP. Toto je dôležité mať na pamäti. Napríklad nemôžete použiť ssh do žiadneho z virtuálnych počítačov pomocou jeho súkromnej adresy IP.
Ďalej, Node-1 aj Node-2 majú webový server Apache slúžiaci na dve odlišné webové stránky. To nám pomôže odlíšiť jeden od druhého.
Prvý web hovorí „WEBOVÁ STRÁNKA 1 FUNGUJE!!!“
Druhá webová stránka to ukazuje podobne:
Vaše webové stránky sa môžu líšiť, ale ak chcete replikovať toto nastavenie ako východiskový bod, spustite apt install apache2 na Node-1 a Node-2. Potom upravte súbor / var / www / html / index.html, aby webový server povedal všetko, čo chcete.
Reverzný server VM je stále nedotknutý. Všetky VM používajú Ubuntu 18.04 LTS, ale môžete slobodne používať akýkoľvek iný OS, ktorý chcete. Môžete to dokonca napodobniť pomocou kontajnerov Docker. Vytvorením používateľom definovanej siete Docker Bridge a na nej umiestnených kontajnerov môžete každému kontajneru priradiť súkromnú adresu IP a preposlať všetky proxy HTTP / HTTPS do jedného kontajnera, ktorým by bol náš reverzný kontajner proxy Nginx.
Zatiaľ je všetko dobré.
Predvolená konfigurácia Nginx
Začnime inštaláciou Nginx na reverzný server proxy, používam Ubuntu, takže apt je môj správca balíkov:
$ sudo apt nainštalovať nginxOdstraňovanie predvolenej konfigurácie, ak používate distribúciu založenú na Debiane
Predtým, ako prejdeme ďalej, malá poznámka o konfigurácii Nginxu. Všetky rôzne konfiguračné súbory sú uložené v / etc / nginx vrátane nginx.conf súbor, ktorý je hlavným konfiguračným súborom. Ak sa pozrieme na obsah tohto súboru (vo vnútri bloku http), všimneme si nasledujúce dva riadky:
…zahrnúť / etc / nginx / conf.d / *.conf;
zahrnúť / etc / nginx / sites-enabled / *;
…
Druhý riadok obsahuje všetky súbory v adresári s povolenými adresami serverov po konfiguráciu Nginxu. Toto je štandardný postup vo väčšine distribúcií založených na Debiane. Napríklad predvolená webová stránka „Vitajte na serveri Nginx“ má zodpovedajúci súbor s názvom predvolený v umiestnení / etc / nginx / sites-available / default so symbolickým odkazom na / etc / nginx / sites-enabled /, ale toto nepotrebujeme predvolenú webovú stránku, aby sme mohli symbolický odkaz bezpečne odstrániť. Originál je stále k dispozícii v adresári sites-available.
$ rm / etc / nginx / sites-enabled / defaultAle keď vytvoríme reverznú konfiguráciu proxy, urobíme to v conf.adresár d (s názvom nášho súboru, ktorý má a .conf rozšírenie) toto je univerzálne, a funguje vo všetkých distribúciách, nielen v Debiane alebo Ubuntu.
Odstraňuje sa predvolená konfigurácia pre iné distribúcie
Ak nepoužívate distribúciu založenú na Debiane, nájdete predvolené nastavenie Uvítacia stránka konfigurácia na / etc / nginx / conf.d / predvolené.conf Ak chcete súbor v budúcnosti použiť, jednoducho ho presuňte na bezpečné miesto (nejde o symbolický odkaz)
$ mv / etc / nginx / conf.d / predvolené.conf ~ / predvolené.konfNiekedy sa nachádza v priečinku / etc / nginx / default.d pretože ľudia sa jednoducho nemôžu dohodnúť na jednom jednoduchom štandarde! Aby ste na to prišli, museli by ste trochu kopať v adresári / etc / nginx.
Pridanie reverzných blokov proxy
Ako už bolo uvedené vyššie, za týmto serverom proxy sú dva rôzne názvy domén, ktoré hostím
- ranvirslog.com (WEBOVÁ STRÁNKA 1) s IP 10.135.123.183
- ranvirslog.com (WEBOVÁ STRÁNKA 2) s IP 10.135.123.186
Vytvorme teda jeden súbor na každý web v súbore / etc / nginx / conf.d / priečinok. Takže sme dobre organizovaní.
$ touch / etc / nginx / conf.d / ww1.konf$ touch / etc / nginx / conf.d / ww2.konf
Súbory môžete pomenovať, ak chcete, pokiaľ má a .conf na konci svojho názvu.
V prvom súbore ww1.conf pridať nasledujúce riadky:
serverpočúvať 80;
počúvať [::]: 80;
nazov_serveru ww1.ranvirslog.com;
miesto /
proxy_pass http: // 10.135.123.183 /;
proxy_buffering vypnutý;
proxy_set_header X-Real-IP $ remote_addr;
Príkazy posluchu povedia Nginxu, aby počúval na porte 80 pre prípady IPv4 aj IPv6. Potom skontroluje, či je názov_servera ww1.ranvirslog.com, potom sa umiestni blok umiestnenia a naštartuje požiadavku na adresu http: // 10.135.123.183 / s vypnutým ukladaním do vyrovnávacej pamäte. Riadok proxy_set_header… navyše zaisťuje, že sa pôvodná adresa IP klienta preposiela na proxy server. To je užitočné v prípade, že chcete vypočítať počet jedinečných návštevníkov atď. Inak by proxy server mal iba jedného návštevníka - server Nginx.
Možnosti ukladania do vyrovnávacej pamäte a možnosti set_header sú úplne voliteľné a práve sa pridávajú, aby bolo zabezpečenie servera čo najtransparentnejšie. Pre 2.sv.v.ranvirslog.com, pridal som nasledujúcu konfiguráciu na / etc / nginx / conf.d / ww2.conf:
serverpočúvať 80;
počúvať [::]: 80;
názov_servera 2.sv.ranvirslog.com;
miesto /
proxy_pass http: // 10.135.123.186 /;
proxy_buffering vypnutý;
proxy_set_header X-Real-IP $ remote_addr;
Uložte oba súbory a otestujte, či je celková konfigurácia platná alebo nie:
$ sudo nginx -tAk sa vyskytnú chyby, výstup vyššie uvedeného príkazu vám pomôže ich nájsť a opraviť. Teraz reštartujte server:
$ service nginx reštartMôžete otestovať, či to fungovalo alebo nie, navštívením rôznych názvov domén vo svojom prehliadači a zobrazením výsledku.
Záver
Prípad použitia každého jednotlivca je iný. Konfigurácia uvedená vyššie môže vyžadovať jemné doladenie, aby fungovala pre váš scenár. Možno používate viac serverov na rovnakom hostiteľovi, ale na rôznych portoch, v takom prípade bude mať riadok proxy_pass… hodnotu http: // localhost: portNumber /.
Tieto podrobnosti veľmi závisia od vášho prípadu použitia. Ďalšie informácie o ďalších možnostiach a laditeľnosti nájdete v oficiálnych dokumentoch Nginx.