Vad är en omvänd proxy?
En proxyserver är den som pratar med Internet på dina vägnar. Till exempel om ditt kolleges nätverk har blockerat https: // www.Facebook.com / men domänen https: // exempelproxy.com är fortfarande tillgängligt, då kan du besöka det senare och det kommer att vidarebefordra alla dina förfrågningar om Facebook-servrar till Facebook och skicka med svaren från Facebook tillbaka till din webbläsare.
För att sammanfatta skickar en proxy förfrågningar på uppdrag av en av fler klienter till alla servrar ute på Internet. En omvänd proxy beter sig på liknande sätt.
A omvänd proxy tar emot begäran från alla kunder på uppdrag av en eller flera servrar. Så om du har ett par servrar som är värd för ww1.exempel.com och ww2.exempel.com kan en omvänd proxyserver acceptera förfrågningar för de två servrarnas räkning, vidarebefordra dessa förfrågningar till deras respektive slutpunkter där svaret genereras och skickas tillbaka till den omvända proxyen för att vidarebefordras till klienterna.
Upplägget
Innan vi börjar justera Nginx-konfigurationsfiler och göra en omvänd proxyserver. Jag vill sätta i sten hur min inställning ser ut, så när du försöker implementera din design, skulle det vara mindre förvirrande.
Jag använde DigitalOceans plattform för att snurra upp tre VPS. De är alla på samma nätverk, var och en med sin egen privata IP, och endast en VPS har en statisk offentlig IP (detta kommer att vara vår omvända proxyserver.)
VM / värdnamn | Privat IP | Offentlig IP | Roll |
Reverseproxy | 10.135.123.187 | 159.89.108.14 | Omvänd proxy, kör Nginx |
Nod-1 | 10.135.123.183 | Ej tillämpligt | Kör första webbplatsen |
Nod-2 | 10.135.123.186 | Ej tillämpligt | Kör andra webbplats |
De två olika webbplatserna som körs har domännamn ww1.ranvirslog.com och ww2.ranvirslog.com och båda deras A-poster pekar på reverseproxys offentliga IP, dvs.e, 159.89.108.14
Tanken bakom privat IP är att de tre virtuella datorerna kan prata med varandra via denna privata IP, men en fjärranvändare kan bara komma åt den omvända proxy-VM vid sin offentliga IP. Detta är viktigt att komma ihåg. Du kan till exempel inte ssh in i någon av den virtuella datorn med sin privata IP.
Dessutom har både Node-1 och Node-2 en Apache-webbserver som serverar två distinkta webbsidor. Detta hjälper oss att skilja varandra från varandra.
Den första webbplatsen säger “WEBSITE 1 FUNGERAR!!!”
På samma sätt visar den andra webbplatsen detta:
Dina webbplatser kan skilja sig, men om du vill replikera den här inställningen som utgångspunkt, kör apt install apache2 på Node-1 och Node-2. Redigera sedan filen / var / www / html / index.html så att webbservern säger vad du vill att den ska säga.
Den omvända virtuella datorn är fortfarande orörd. Alla virtuella datorer kör Ubuntu 18.04 LTS, men du är fri att använda vilket annat operativsystem du vill. Du kan till och med emulera detta med Docker-behållare. Genom att skapa ett användardefinierat Docker bridge-nätverk och lekbehållare på det kan du tilldela varje container en privat IP och vidarebefordra all HTTP / HTTPS-proxy till en container, vilket skulle vara vår Nginx-omvänd proxy-behållare.
Än så länge är allt bra.
Nginx standardkonfiguration
Låt oss börja med att installera Nginx på reverseproxy-servern, jag använder Ubuntu så apt är min pakethanterare:
$ sudo apt installera nginxTa bort standardkonfigurationen om du använder Debian-baserad distribution
Innan vi går vidare en liten anteckning om Nginx konfiguration. Alla de olika konfigurationsfilerna lagras i / etc / nginx inklusive nginx.conf-fil som är huvudkonfigurationsfilen. Om vi tittar på innehållet i den här filen (inuti http-blocket) kommer du att märka följande två rader:
..inkludera / etc / nginx / conf.d / *.conf;
inkludera / etc / nginx / sites-enabled / *;
..
Den andra raden innehåller alla filer i den webbplatsaktiverade katalogen till Nginx-konfigurationen. Detta är standardpraxis för de flesta Debian-baserade distributioner. Standardwebbplatsen "Välkommen till Nginx" har till exempel en motsvarande fil med namnet standard på platsen / etc / nginx / sites-available / default med en symlänk till / etc / nginx / sites-enabled /, men vi behöver inte detta standardwebbsida så att vi säkert kan ta bort symlänken. Originalet är fortfarande tillgängligt i katalogerna som finns på webbplatser.
$ rm / etc / nginx / sites-enabled / defaultMen när vi skapar omvänd proxy-konfiguration kommer vi att göra det i conf.d-katalog (med vårt filnamn som har en .conf-förlängning) detta är universellt, och fungerar i alla distributioner, inte bara Debian eller Ubuntu.
Tar bort standardkonfigurationen för andra distros
Om du inte använder Debian-baserad distro hittar du standard Välkomstsida konfiguration vid / etc / nginx / conf.d / standard.conf flytta bara filen till någon plats säker om du vill använda den i framtiden (eftersom detta inte är en symlänk)
$ mv / etc / nginx / conf.d / standard.conf ~ / standard.konfDet kan ibland hittas i / etc / nginx / default.d eftersom människor bara inte kan komma överens om en enda enkel standard! Så du måste gräva lite i katalogen / etc / nginx för att räkna ut det här.
Lägga till omvänd proxyblock
Som nämnts tidigare är de två olika domännamnen jag är värd bakom denna proxy
- ranvirslog.com (WEBBPLATS 1) med IP 10.135.123.183
- ranvirslog.com (WEBSITE 2) med IP 10.135.123.186
Så låt oss skapa en fil per webbplats i / etc / nginx / conf.d / mapp. Så vi är välorganiserade.
$ touch / etc / nginx / conf.d / ww1.konf$ touch / etc / nginx / conf.d / ww2.konf
Du kan namnge filerna vad du vill, så länge det har en .conf i slutet av sitt namn.
I den första filen ww1.conf lägg till följande rader:
serverlyssna 80;
lyssna [::]: 80;
server_namn ww1.ranvirslog.com;
plats /
proxy_pass http: // 10.135.123.183 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Lyssningsuttalandena ber Nginx att lyssna på port 80 för både IPv4- och IPv6-fall. Den kontrollerar sedan om serverns namn är ww1.ranvirslog.com då platsblocket sparkar in och proxys förfrågan till http: // 10.135.123.183 / med buffrad avstängd. Dessutom säkerställer raden proxy_set_header ... att klientens ursprungliga IP vidarebefordras till proxyservern. Detta är till hjälp om du vill beräkna antalet unika besökare osv. Annars skulle proxyservern bara ha en besökare - Nginx-servern.
Buffertalternativet och set_header-alternativen är helt valfria och läggs bara till för att göra proxyserveringen så transparent som möjligt. För ww2.ranvirslog.com-webbplats, jag lade till följande konfiguration på / etc / nginx / conf.d / ww2.conf:
serverlyssna 80;
lyssna [::]: 80;
server_namn ww2.ranvirslog.com;
plats /
proxy_pass http: // 10.135.123.186 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Spara båda filerna och testa om den övergripande konfigurationen är giltig eller inte:
$ sudo nginx -tOm det finns fel kommer utdata från ovanstående kommando att hjälpa dig att hitta och fixa dem. Starta om servern:
$ service nginx starta omOch du kan testa om det fungerade eller inte genom att besöka de olika domännamnen i din webbläsare och se resultatet.
Slutsats
Varje individs användningsfall är annorlunda. Konfigurationen som nämns ovan kan behöva lite justering för att fungera för ditt scenario. Kanske kör du flera servrar på samma värd, men i olika portar, i så fall har proxy_pass ... -raden http: // localhost: portNumber / som sitt värde.
Dessa detaljer beror väldigt mycket på ditt användningsfall. För mer information om andra alternativ och inställningar se de officiella Nginx-dokumenten.