Hvad er en omvendt proxy?
En proxyserver er den, der taler til Internettet på dine vegne. For eksempel, hvis dit kolleges netværk har blokeret https: // www.Facebook.com / men domænet https: // eksempelproxy.com er stadig tilgængelig, så kan du besøge sidstnævnte, og det videresender alle dine anmodninger om Facebook-servere til Facebook og sender svarene fra Facebook tilbage til din browser.
For at resumere sender en proxy anmodninger på vegne af en af flere klienter til alle servere ude på Internettet. En omvendt proxy opfører sig på samme måde.
EN omvendt proxy modtager anmodning fra alle klienter på vegne af en eller flere servere. Så hvis du har et par servere, der hoster ww1.eksempel.com og ww2.eksempel.com en omvendt proxyserver kan acceptere anmodninger på vegne af de to servere, videresende disse anmodninger til deres respektive slutpunkter, hvor svaret genereres og sendes tilbage til den omvendte proxy for at blive videresendt tilbage til klienterne.
Opsætningen
Før vi begynder at tilpasse Nginx-konfigurationsfiler og lave en omvendt proxyserver. Jeg vil sætte i sten, hvordan min opsætning ser ud, så når du prøver at implementere dit design dig, ville det være mindre forvirrende.
Jeg brugte DigitalOceans platform til at spinde op til tre VPS. De er alle på samme netværk hver med sin egen private IP, og kun en VPS har en statisk offentlig IP (dette vil være vores omvendte proxyserver.)
VM / værtsnavn | Privat IP | Offentlig IP | Rolle |
Reverseproxy | 10.135.123.187 | 159.89.108.14 | Omvendt proxy, der kører Nginx |
Node-1 | 10.135.123.183 | Ikke relevant | Kører første websted |
Node-2 | 10.135.123.186 | Ikke relevant | Kører andet websted |
De to forskellige websteder, der kører, har domænenavne ww1.ranvirslog.com og 2. verdenskrig.ranvirslog.com og begge deres A-poster peger på reverseproxys offentlige IP, dvs.e, 159.89.108.14
Ideen bag privat IP er, at de tre virtuelle computere kan tale med hinanden via denne private IP, men en fjernbruger kan kun få adgang til den omvendte proxy-VM på sin offentlige IP. Dette er vigtigt at huske på. For eksempel kan du ikke ssh ind i nogen af den virtuelle computer ved hjælp af dens private IP.
Desuden har både Node-1 og Node-2 en Apache-webserver, der serverer to forskellige websider. Dette vil hjælpe os med at skelne hinanden fra hinanden.
Den første webside siger “WEBSITE 1 WORKS!!!”
Tilsvarende viser det andet websted dette:
Dine websteder kan variere, men hvis du vil replikere denne opsætning som udgangspunkt, skal du køre apt install apache2 på Node-1 og Node-2. Rediger derefter filen / var / www / html / index.html, så webserveren siger, hvad du vil have det til at sige.
Den reverseproxy VM er stadig uberørt. Alle virtuelle computere kører Ubuntu 18.04 LTS, men du er fri til at bruge ethvert andet operativsystem, du ønsker. Du kan endda efterligne dette ved hjælp af Docker-containere. Ved at oprette et brugerdefineret Docker bridge-netværk og gydebeholdere på det kan du tildele hver container en privat IP og videresende al HTTP / HTTPS-proxyen til en container, hvilket ville være vores Nginx-omvendte proxy-container.
Så langt så godt.
Nginx standardkonfiguration
Lad os begynde med at installere Nginx til reverseproxy-serveren, jeg bruger Ubuntu, så apt er min pakkehåndtering:
$ sudo apt installere nginxFjernelse af standardkonfiguration, hvis du bruger Debian-baseret distribution
Før vi går videre en lille note om Nginxs konfiguration. Alle de forskellige konfigurationsfiler er gemt i / etc / nginx inklusive nginx.conf-fil, som er den vigtigste konfigurationsfil. Hvis vi ser på indholdet af denne fil (inde i http-blok), vil du bemærke følgende to linjer:
..inkluderer / etc / nginx / conf.d / *.conf;
inkluderer / etc / nginx / sites-enabled / *;
..
Den anden linje inkluderer alle filerne i det sted-aktiverede bibliotek til Nginxs konfiguration. Dette er standardpraksis for de fleste Debian-baserede distributioner. For eksempel har standard "Velkommen til Nginx" -websiden en tilsvarende fil med navnet standard på placeringen / etc / nginx / sites-available / default med et symlink til / etc / nginx / sites-enabled /, men vi har ikke brug for dette standardwebside, så vi sikkert kan fjerne symlinket. Originalen er stadig tilgængelig i biblioteket, der er tilgængelig.
$ rm / etc / nginx / sites-enabled / defaultMen når vi opretter reverse proxy-konfiguration, gør vi det i conf.d-katalog (hvor vores filnavn har en .conf udvidelse) dette er universelt, og fungerer på tværs af alle distributioner, ikke kun Debian eller Ubuntu.
Fjernelse af standardkonfiguration for andre distroer
Hvis du ikke bruger Debian-baseret distro, finder du standard Velkomstside konfiguration ved / etc / nginx / conf.d / standard.conf skal du bare flytte filen til et sikkert sted, hvis du vil bruge den i fremtiden (da dette ikke er et symlink)
$ mv / etc / nginx / conf.d / standard.conf ~ / standard.konfDet kan nogle gange findes i / etc / nginx / default.d fordi folk bare ikke kan være enige om en enkelt enkel standard! Så du bliver nødt til at grave lidt i / etc / nginx-biblioteket for at finde ud af dette.
Tilføjelse af omvendte proxyblokke
Som nævnt før er de to forskellige domænenavne, jeg er vært bag denne proxy
- ranvirslog.com (WEBSITE 1) med IP 10.135.123.183
- ranvirslog.com (WEBSITE 2) med IP 10.135.123.186
Så lad os oprette en fil pr. Websted i / etc / nginx / conf.d / mappe. Så vi er velorganiserede.
$ touch / etc / nginx / conf.d / ww1.konf$ touch / etc / nginx / conf.d / ww2.konf
Du kan navngive filerne, hvad du vil, så længe den har en .conf i slutningen af navnet.
I den første fil ww1.conf tilføj følgende linjer:
serverlyt 80;
lyt [::]: 80;
servernavn ww1.ranvirslog.com;
Beliggenhed /
proxy_pass http: // 10.135.123.183 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Lytteudsagnene fortæller Nginx at lytte på port 80 til både IPv4- og IPv6-sager. Derefter kontrolleres det, om servernavnet er ww1.ranvirslog.com derefter placeringsblokken sparker ind og proxyserer anmodningen til http: // 10.135.123.183 / med buffering slået fra. Desuden sikrer proxy_set_header… linjen, at klientens originale IP videresendes til den proxiserede server. Dette er nyttigt, hvis du vil beregne antallet af unikke besøgende osv. Ellers ville den proxiserede server kun have en besøgende - Nginx-serveren.
Buffermuligheden og set_header-indstillingerne er helt valgfri og tilføjes bare for at gøre proxyen så gennemsigtig som muligt. Til ww2.ranvirslog.com-websted tilføjede jeg følgende konfiguration på / etc / nginx / conf.d / ww2.conf:
serverlyt 80;
lyt [::]: 80;
servernavn ww2.ranvirslog.com;
Beliggenhed /
proxy_pass http: // 10.135.123.186 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Gem begge filerne, og test, om den overordnede konfiguration er gyldig eller ej:
$ sudo nginx -tHvis der er fejl, vil output fra ovenstående kommando hjælpe dig med at finde og rette dem. Genstart nu serveren:
$ service nginx genstartOg du kan teste, om det fungerede eller ikke ved at besøge de forskellige domænenavne i din browser og se resultatet.
Konklusion
Hver enkelt persons brugstilfælde er forskellig. Ovennævnte konfiguration kan have brug for en smule finjustering for at fungere efter dit scenario. Måske kører du flere servere på den samme vært, men i forskellige porte, i så fald har proxy_pass… -linjen http: // localhost: portNumber / som sin værdi.
Disse detaljer afhænger meget af din brugssag. For yderligere oplysninger om andre muligheder og tuneables se de officielle Nginx-dokumenter.