Nginx

Nginx Reverse Proxy

Nginx Reverse Proxy

Wat is een omgekeerde proxy??

Een proxyserver is degene die namens jou met internet praat. Als het netwerk van uw hogeschool bijvoorbeeld https://www . heeft geblokkeerd.facebook.com/ maar het domein  https://exampleproxy.com nog steeds toegankelijk is, dan kun je de laatste bezoeken en het zal al je verzoeken voor Facebook-servers doorsturen naar Facebook en de reacties van Facebook terugsturen naar je browser.

Om samen te vatten, een proxy verzendt verzoeken namens een of meer clients naar alle servers op internet. Een reverse proxy gedraagt ​​zich op een vergelijkbare manier.

EEN omgekeerde proxy ontvangt verzoek van alle klanten namens een of meer servers. Dus als je een paar servers hebt die ww1 hosten.voorbeeld.com en ww2.voorbeeld.com een ​​reverse proxy-server kan verzoeken accepteren namens de twee servers, deze verzoeken doorsturen naar hun respectieve eindpunten waar het antwoord wordt gegenereerd en teruggestuurd naar de reverse proxy om terug te worden doorgestuurd naar de clients.

De opzet

Voordat we Nginx-configuratiebestanden gaan aanpassen en een reverse proxy-server maken. Ik wil in steen zetten hoe mijn opstelling eruit ziet, dus als je je ontwerp probeert te implementeren, zou het minder verwarrend zijn.

Ik heb het platform van DigitalOcean gebruikt om drie VPS te laten draaien. Ze bevinden zich allemaal op hetzelfde netwerk, elk met een eigen privé-IP, en slechts één VPS heeft een statisch openbaar IP-adres (dit wordt onze reverse proxy-server.)

VM/hostnaam Privé IP Openbare IP Rol
Omgekeerde proxy 10.135.123.187 159.89.108.14 Omgekeerde proxy, met Nginx
Knooppunt-1 10.135.123.183 Nvt Eerste website draaien
Knooppunt-2 10.135.123.186 Nvt Tweede website draaien

De twee verschillende websites die actief zijn, hebben domeinnamen ww1.ranvirslog.com en ww2.ranvirslog.com en hun beide A-records verwijzen naar het openbare IP-adres van de reverseproxy, i.e, 159.89.108.14

Het idee achter privé-IP is dat de drie VM's met elkaar kunnen praten via dit privé-IP, maar een externe gebruiker heeft alleen toegang tot de reverse proxy-VM op zijn openbare IP. Dit is belangrijk om in gedachten te houden. U kunt bijvoorbeeld niet ssh-en naar een van de VM's met behulp van zijn privé-IP.

Bovendien hebben zowel Node-1 als Node-2 een Apache-webserver die twee verschillende webpagina's bedient. Dit zal ons helpen om de een van de ander te onderscheiden.

De eerste website zegt "WEBSITE 1 WERKT"!!!”

Evenzo laat de tweede website dit zien:

Uw websites kunnen verschillen, maar als u deze setup als uitgangspunt wilt repliceren, voer dan apt install apache2 uit op Node-1 en Node-2. Bewerk vervolgens het bestand /var/www/html/index.html zodat de webserver zegt wat u maar wilt.

De reverseproxy-VM is nog steeds onaangeroerd. Alle VM's draaien Ubuntu 18.04 LTS, maar je bent vrij om elk ander besturingssysteem te gebruiken dat je wilt. Je kunt dit zelfs emuleren met Docker-containers. Door een door de gebruiker gedefinieerd Docker-brugnetwerk te maken en daarop containers te spawnen, kunt u elke container een privé-IP toewijzen en alle HTTP / HTTPS-proxy doorsturen naar één container, wat onze Nginx reverse proxy-container zou zijn.

Tot nu toe zo goed.

Nginx standaardconfiguratie

Laten we beginnen met het installeren van Nginx op de reverseproxy-server, ik gebruik Ubuntu, dus apt is mijn pakketbeheerder:

$ sudo apt install nginx

Standaardconfiguratie verwijderen als u een op Debian gebaseerde distributie gebruikt

Voordat we verder gaan een kleine opmerking over de configuratie van Nginx. Alle verschillende configuratiebestanden worden opgeslagen in /etc/nginx inclusief de nginx.conf-bestand dat het hoofdconfiguratiebestand is. Als we naar de inhoud van dit bestand kijken (in het http-blok), ziet u de volgende twee regels:


inclusief /etc/nginx/conf.d/*.conf;
inclusief /etc/nginx/sites-enabled/*;

De tweede regel bevat alle bestanden in de sites-enabled directory naar de Nginx-configuratie. Dit is de standaardpraktijk voor de meeste op Debian gebaseerde distributies. De standaard "Welkom bij Nginx"-webpagina heeft bijvoorbeeld een bijbehorend bestand met de naam default op de locatie /etc/nginx/sites-available/default met een symbolische link naar /etc/nginx/sites-enabled/, maar we hebben dit niet nodig standaard webpagina zodat we de symbolische link veilig kunnen verwijderen. Het origineel is nog steeds beschikbaar in de directory 'sites-available'.

$ rm /etc/nginx/sites ingeschakeld/standaard

Maar wanneer we een omgekeerde proxyconfiguratie maken, doen we dit in conf.d directory (waarbij onze bestandsnaam a . heeft .conf extensie) dit is universeel, en werkt in alle distributies, niet alleen Debian of Ubuntu.

Standaardconfiguratie voor andere distributies verwijderen

Als u geen op Debian gebaseerde distro gebruikt, vindt u de standaard Welkomstpagina configuratie op /etc/nginx/conf.d/standaard.conf verplaats het bestand gewoon naar een veilige plaats als je het in de toekomst wilt gebruiken (aangezien dit geen symbolische link is)

$ mv /etc/nginx/conf.d/standaard.conf ~/default.conf

Het is soms te vinden in /etc/nginx/default.d omdat mensen het gewoon niet eens kunnen worden over een enkele eenvoudige standaard! Je zou dus wat moeten graven in de /etc/nginx directory om dit te achterhalen.

Reverse proxy-blokken toevoegen

Zoals eerder vermeld, zijn de twee verschillende domeinnamen die ik achter deze proxy host:

  1. ranvirslog.com (WEBSITE 1) met IP 10.135.123.183
  2. ranvirslog.com (WEBSITE 2) met IP 10.135.123.186

Laten we dus één bestand per website maken in /etc/nginx/conf.d/ map. Zo zijn we goed georganiseerd.

$ raak /etc/nginx/conf . aan.d/ww1.conf
$ raak /etc/nginx/conf . aan.d/ww2.conf

U kunt de bestanden een naam geven die u maar wilt, zolang het maar een heeft .conf aan het einde van de naam.

In het eerste bestand ww1.conf voeg de volgende regels toe:

server
luister 80;
luister [::]:80;
 
servernaam ww1.ranvirslog.com;
 
plaats /
proxy_pass http://10.135.123.183/;
proxy_buffering uit;
proxy_set_header X-Real-IP $remote_addr;

De luisterinstructies vertellen Nginx om te luisteren op poort 80 voor zowel IPv4- als IPv6-gevallen. Vervolgens wordt gecontroleerd of de servernaam ww1 is.ranvirslog.com, dan wordt het locatieblok geactiveerd en wordt het verzoek doorgestuurd naar http://10.135.123.183/ met buffering uitgeschakeld. Bovendien zorgt de proxy_set_header... regel ervoor dat het oorspronkelijke IP-adres van de client wordt doorgestuurd naar de proxyserver. Dit is handig als u het aantal unieke bezoekers wilt berekenen, enz. Anders zou de proxyserver maar één bezoeker hebben - de Nginx-server.

De buffering-optie en set_header-opties zijn volledig optioneel en zijn alleen toegevoegd om de proxy zo transparant mogelijk te maken. voor de ww2.ranvirslog.com website, heb ik de volgende configuratie toegevoegd op /etc/nginx/conf.d/ww2.conf:

server
luister 80;
luister [::]:80;
 
servernaam ww2.ranvirslog.com;
 
plaats /
proxy_pass http://10.135.123.186/;
proxy_buffering uit;
proxy_set_header X-Real-IP $remote_addr;

Sla beide bestanden op en test of de algehele configuratie geldig is of niet:

$ sudo nginx -t

Als er fouten zijn, zal de uitvoer van de bovenstaande opdracht u helpen deze te vinden en op te lossen. Start nu de server opnieuw op:

$ service nginx opnieuw opstarten

En je kunt testen of het werkte of niet door de verschillende domeinnamen in je browser te bezoeken en het resultaat te zien.

Conclusie

De use case van elk individu is anders. De hierboven genoemde configuratie heeft mogelijk wat aanpassingen nodig om voor uw scenario te werken. Misschien draait u meerdere servers op dezelfde host, maar op verschillende poorten, in dat geval heeft de proxy_pass... regel http://localhost:portNumber/ als waarde.

Deze details zijn sterk afhankelijk van uw gebruikssituatie. Zie de officiële Nginx-documenten voor meer informatie over andere opties en tuneables.

Beste spellen om te spelen met handtracking
Oculus Quest introduceerde onlangs het geweldige idee van handtracking zonder controllers. Met een steeds toenemend aantal games en activiteiten die f...
OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...
Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...