Mi a fordított proxy?
A proxykiszolgáló az, amely az Ön nevében beszél az Internettel. Például, ha az egyetem hálózata letiltotta a https: // www fájlt.Facebook.com /, de a domain https: // exampleproxy.com továbbra is elérhető, akkor meglátogathatja az utóbbit, és továbbítja a Facebook szerverekre vonatkozó összes kérését a Facebooknak, és a Facebook válaszaival visszaküldi a böngészőjének.
Összefoglalásképpen: a proxy a több kliens egyikének nevében kéréseket küld az Internet bármely szerverére. A fordított proxy hasonló módon viselkedik.
A fordított proxy kérést kap minden ügyfeltől egy vagy több nevében szerverek. Tehát, ha van pár ww1-t tároló szerver.példa.com és ww2.példa.com egy fordított proxykiszolgáló fogadhat kéréseket a két szerver nevében, továbbíthatja azokat a saját végpontjaikra, ahol a válasz generálódik, és visszaküldi a fordított proxy-nak, hogy továbbítsa őket az ügyfeleknek.
A beállítás
Mielőtt elkezdenénk módosítani az Nginx konfigurációs fájlokat, és készítenünk egy fordított proxy szervert. Kőbe akarom vésni, hogy néz ki a beállításom, így amikor megpróbálja megvalósítani a tervét, kevésbé zavaró lenne.
A DigitalOcean platformját három VPS felpörgetésére használtam. Mindannyian ugyanazon a hálózaton vannak, mindegyik saját privát IP-vel, és csak egy VPS-nek van statikus nyilvános IP-je (ez lesz a fordított proxy szerverünk).)
Virtuálisgép / hosztnév | Privát IP | Nyilvános IP | Szerep |
Reverseproxi | 10.135.123.187 | 159.89.108.14 | Fordított proxy, az Nginx futtatása |
1. csomópont | 10.135.123.183 | N / A | Az első weboldal futtatása |
2. csomópont | 10.135.123.186 | N / A | A második weboldal működtetése |
A két különböző futó webhely domain névvel rendelkezik w1.ranvirslog.com és ww2.ranvirslog.com és mindkét A rekordjuk a reverzproxi nyilvános IP-jére mutat, azaz.e, 159.89.108.14
A privát IP mögött az az ötlet áll, hogy a három virtuális gép ezen a magán IP-n keresztül tud egymással beszélni, de egy távoli felhasználó csak a fordított proxy virtuális géphez férhet hozzá nyilvános IP-jén. Ezt fontos szem előtt tartani. Például nem küldhet ssh-t egyetlen virtuális gépre sem a saját IP-jével.
Ezenkívül mind a Node-1, mind a Node-2 rendelkezik Apache webszerverrel, amely két külön weboldalt szolgál ki. Ez segít megkülönböztetni egymást.
Az első weboldalon az „1. WEBOLDAL MŰKÖDIK!!!”
Hasonlóképpen, a második webhely is ezt mutatja:
Webhelyei eltérhetnek, de ha ezt a beállítást kiindulási pontként szeretné megismételni, futtassa az apt install apache2 alkalmazást a Node-1 és a Node-2 rendszereken. Ezután szerkessze a / var / www / html / index fájlt.html úgy, hogy a webszerver azt mondjon, amit csak akar.
A reverzproxi virtuális gép még mindig érintetlen. Az összes virtuális gépen fut az Ubuntu 18.04 LTS, de szabadon használhat más kívánt operációs rendszert. Ezt akár a Docker konténerek segítségével is utánozhatja. Ha létrehoz egy felhasználó által definiált Docker hídhálózatot és ívó konténereket tartalmaz, akkor mindegyik konténerhez saját IP-címet rendelhet, és az összes HTTP / HTTPS proxyt egy tárolóhoz továbbíthatja, amely a Nginx fordított proxy tárolónk lenne.
Eddig jó.
Nginx alapértelmezett konfigurációja
Kezdjük azzal, hogy telepítjük az Nginx-et a fordított szerverre, én az Ubuntut használom, így az apt a csomagkezelőm:
$ sudo apt install nginxAz alapértelmezett konfiguráció eltávolítása, ha Debian-alapú terjesztést használ
Mielőtt tovább mennénk, egy kis megjegyzés az Nginx konfigurációjáról. Az összes különféle konfigurációs fájl az / etc / nginx könyvtárban van tárolva, beleértve az nginx fájlt is.conf fájl, amely a fő konfigurációs fájl. Ha megnézzük a fájl tartalmát (a http blokkon belül), akkor a következő két sort veszi észre:
…tartalmazza / etc / nginx / conf.d / *.konf;
tartalmazza az / etc / nginx / sites-enabled / *;
…
A második sor tartalmazza a Nginx konfigurációjáig a fájlokat, amelyek a helyekkel engedélyezett könyvtárban találhatók. Ez a legtöbb Debian-alapú disztribúció szokásos gyakorlata. Például az alapértelmezett „Welcome to Nginx” weboldal rendelkezik egy alapértelmezett nevű fájllal az / etc / nginx / sites-available / default helyen, az / etc / nginx / sites-enabled / szimplinkkel, de erre nincs szükségünk alapértelmezett weboldal, így biztonságosan eltávolíthatjuk a symlinket. Az eredeti továbbra is elérhető a webhelyeken elérhető könyvtárban.
$ rm / etc / nginx / sites-enabled / defaultDe amikor létrehozunk fordított proxy konfigurációt, akkor ezt konf.d könyvtár (a fájlnevünknek a .konf kiterjesztés) ez egyetemes, és minden disztribúción működik, nem csak a Debianon vagy az Ubuntuon.
Alapértelmezett konfiguráció eltávolítása más disztribúciókhoz
Ha nem Debian-alapú terjesztést használ, megtalálja az alapértelmezettet Üdvözlő oldal konfiguráció: / etc / nginx / conf.d / alapértelmezett.conf egyszerűen helyezze át a fájlt egy biztonságos helyre, ha a jövőben használni szeretné (mivel ez nem egy symlink)
$ mv / etc / nginx / conf.d / alapértelmezett.conf ~ / alapértelmezett.konfNéha megtalálható az / etc / nginx / default fájlban.d, mert az emberek egyszerűen nem tudnak megállapodni egyetlen egyszerű szabványban! Tehát egy kis ásást kell végeznie az / etc / nginx könyvtárban, hogy ezt kitalálja.
Fordított proxy blokkok hozzáadása
Mint korábban említettem, a két különböző domain név, amelyet a proxy mögött tárolok, az
- ranvirslog.com (1. WEBOLDAL) IP 10-vel.135.123.183
- ranvirslog.com (2. WEBOLDAL) IP 10-vel.135.123.186
Készítsünk tehát egy fájlt webhelyenként az / etc / nginx / conf fájlban.d / mappa. Tehát jól szervezettek vagyunk.
$ touch / etc / nginx / conf.d / ww1.konf$ touch / etc / nginx / conf.d / ww2.konf
Bármilyen nevet adhat a fájloknak, ameddig csak akarja .conf a neve végén.
Az első fájlban ww1.conf adja hozzá a következő sorokat:
szerverhallgat 80;
hallgat [::]: 80;
szerver_neve ww1.ranvirslog.com;
hely /
proxy_pass http: // 10.135.123.183 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
A hallgatási utasítások azt mondják az Nginx-nek, hogy hallgassa meg a 80-as portot mind az IPv4, mind az IPv6 esetekben. Ezután ellenőrzi, hogy a kiszolgáló_neve ww1.ranvirslog.com, majd a helyblokk beindítja és meghatalmazza a kérést a http: // 10 címre.135.123.183 / kikapcsolt puffereléssel. Ezenkívül a proxy_set_header… sor biztosítja, hogy az ügyfél eredeti IP-címe továbbításra kerüljön a proxykiszolgálóra. Ez hasznos abban az esetben, ha ki szeretné számolni az egyedi látogatók számát stb. Ellenkező esetben a proxykiszolgálónak csak egy látogatója lenne - az Nginx szerver.
A pufferelési és a set_header opciók teljesen opcionálisak, és csak azért vannak hozzáadva, hogy a proxy a lehető legátláthatóbb legyen. A ww2 számára.ranvirslog.com weboldalon a következő konfigurációt adtam hozzá az / etc / nginx / conf címre.d / ww2.konf:
szerverhallgat 80;
hallgat [::]: 80;
szerver_neve ww2.ranvirslog.com;
hely /
proxy_pass http: // 10.135.123.186 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Mentse el a fájlokat, és tesztelje, hogy a teljes konfiguráció érvényes-e vagy sem:
$ sudo nginx -tHa vannak hibák, a fenti parancs kimenete segít megtalálni és kijavítani őket. Indítsa újra a szervert:
$ service nginx újraindításÉs kipróbálhatja, hogy működött-e vagy sem, ha meglátogatja a böngésző különböző domainneveit, és meglátja az eredményt.
Következtetés
Minden egyén használati esete más és más. Előfordulhat, hogy a fent említett konfigurációra szükség van egy kis módosításra, hogy működjön a forgatókönyvön. Lehet, hogy több kiszolgálót futtat ugyanazon a gazdagépen, de különböző portokon, ebben az esetben a proxy_pass ... sor értéke http: // localhost: portNumber / lesz az értéke.
Ezek a részletek nagyon függenek a felhasználási esetétől. Az egyéb opciókról és a hangolható információkról lásd a hivatalos Nginx dokumentumokat.