Android

Een nginx reverse-proxy instellen

NGINX as a Reverse Proxy (listening on port 80)

NGINX as a Reverse Proxy (listening on port 80)

Inhoudsopgave:

Anonim

Een reverse-proxy is een service die een clientverzoek aanneemt, het verzoek naar een of meer proxy-servers verzendt, het antwoord ophaalt en het antwoord van de server aan de client levert.

Vanwege de prestaties en schaalbaarheid wordt NGINX vaak gebruikt als een reverse proxy voor HTTP- en niet-HTTP-servers. Een typische reverse proxy-configuratie is om Nginx voor Node.js, Python of Java-applicaties te plaatsen.

Het gebruik van Nginx als een omgekeerde proxy biedt u verschillende extra voordelen:

  • Load Balancing - Nginx kan load balancing uitvoeren om de aanvragen van klanten te verdelen over proxied servers, die de prestaties, schaalbaarheid en betrouwbaarheid verbeteren. Caching - Met Nginx als een omgekeerde proxy, kunt u de vooraf gerenderde versies van pagina's in de cache opslaan om de laadtijden van pagina's te versnellen. Het werkt door de inhoud die is ontvangen van de antwoorden van de proxy-servers in het cachegeheugen op te slaan en het te gebruiken om te reageren op clients zonder telkens opnieuw contact op te nemen met de proxy-server voor dezelfde inhoud. SSL-beëindiging - Nginx kan fungeren als een SSL-eindpunt voor verbindingen met de clients. Het zal inkomende SSL-verbindingen verwerken en decoderen en de antwoorden van de proxy-server coderen. Compressie - Als de proxy-server geen gecomprimeerde antwoorden verzendt, kunt u Nginx configureren om de antwoorden te comprimeren voordat ze naar de clients worden verzonden. DDoS-aanvallen beperken - U kunt de binnenkomende aanvragen en het aantal verbindingen per IP-adres beperken tot een waarde die normaal is voor gewone gebruikers. Met Nginx kunt u ook de toegang blokkeren of beperken op basis van de clientlocatie en de waarde van de headers van het verzoek, zoals "User-Agent" en "Referer".

In dit artikel worden de stappen beschreven die nodig zijn om Nginx als een omgekeerde proxy te configureren.

voorwaarden

We gaan ervan uit dat Nginx op uw Ubuntu-, CentOS- of Debian-server is geïnstalleerd.

Nginx gebruiken als reverse-proxy

Om Nginx te configureren als een reverse-proxy voor een HTTP-server, opent u het serverblokconfiguratiebestand van het domein en geeft u een locatie en een proxy-server op:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

De proxied-server-URL wordt ingesteld met behulp van de proxy_pass richtlijn en kan HTTP of HTTPS als protocol, domeinnaam of IP-adres, en een optionele poort en URI als een adres.

De bovenstaande configuratie geeft Nginx de opdracht om alle verzoeken naar de /app locatie door te geven aan de proxy-server op http://127.0.0.1:8080 .

Op distributies op basis van Ubuntu en Debian worden /etc/nginx/conf.d opgeslagen in de map /etc/nginx/sites-available , terwijl /etc/nginx/conf.d map /etc/nginx/conf.d .

Laten we het volgende voorbeeld nemen om beter te illustreren hoe location en proxy_pass richtlijnen werken:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Als een bezoeker toegang heeft tot http://example.com/blog/my-post , zal Nginx dit verzoek http://node1.com:8000/wordpress/my-post naar http://node1.com:8000/wordpress/my-post .

Wanneer het adres van de proxy-server een URI ( /wordpress/ ) bevat, wordt de aanvraag-URI die wordt doorgegeven aan de proxy-server vervangen door een URI die is gespecificeerd in de richtlijn. Als het adres van de proxy-server zonder URI is opgegeven, wordt de volledige aanvraag-URI aan de proxy-server doorgegeven.

Headers voor aanvraag doorgeven

Wanneer Nginx een verzoek vervangt, definieert het automatisch twee kopvelden in een proxy-verzoek van de client, Host en Connection , en verwijdert het lege koppen. Host is ingesteld op de variabele $proxy_host en Connection is ingesteld om te sluiten.

Als u headers voor proxy_set_header wilt aanpassen of instellen, gebruikt u de proxy_set_header richtlijn, gevolgd door de waarde van de header. U vindt hier een lijst met alle beschikbare Request Headers en hun toegestane waarden. Als u wilt voorkomen dat een koptekst wordt doorgegeven aan de proxy-server, stelt u deze in op een lege tekenreeks "" .

In het volgende voorbeeld wijzigen we de waarde van het veld Host header in $host en verwijderen we het veld Accept-Encoding header door de waarde in te stellen op een lege tekenreeks.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Wanneer u het configuratiebestand wijzigt, moet u de Nginx-service opnieuw opstarten om de wijzigingen van kracht te laten worden.

Nginx configureren als een reverse-proxy voor een niet-HTTP-proxy-server

Om Nginx te configureren als een reverse proxy voor een niet-HTTP proxy-server, kunt u de volgende richtlijnen gebruiken:

  • fastcgi_pass - reverse proxy naar een FastCGI-server. uwsgi_pass - reverse proxy naar een uwsgi-server. scgi_pass - reverse proxy naar een SCGI-server. memcached_pass - reverse proxy naar een Memcached-server.

Een van de meest voorkomende voorbeelden is om Nginx te gebruiken als reverse proxy voor PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Gemeenschappelijke Nginx Reverse Proxy-opties

Het aanbieden van inhoud via HTTPS is tegenwoordig een standaard geworden. In deze sectie geven we u een voorbeeld van HTTPS Nginx reverse proxy-configuratie inclusief de aanbevolen Nginx proxy-parameters en headers.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - Definieert de HTTP-protocolversie voor proxying, standaard staat deze ingesteld op 1.0. Voor Websockets en keepalive verbindingen moet u versie 1.1 gebruiken. proxy_cache_bypass $http_upgrade - Stelt voorwaarden in waaronder het antwoord niet uit een cache wordt genomen. Upgrade $http_upgrade en Connection "upgrade" - Deze headervelden zijn verplicht als uw applicatie Websockets gebruikt. Host $host - De variabele $host in de volgende volgorde van prioriteit bevat: hostnaam uit de aanvraagregel, of hostnaam uit het veld Hostaanvraagkop of de servernaam die overeenkomt met een aanvraag. X-Real-IP $remote_addr - X-Real-IP $remote_addr het echte externe IP-adres van de bezoeker door naar de proxy-server. X-Forwarded-For $proxy_add_x_forwarded_for - Een lijst met de IP-adressen van elke server waar de client doorheen is gemachtigd. X-Forwarded-Proto $scheme - Bij gebruik binnen een HTTPS-serverblok wordt elk HTTP-antwoord van de proxy-server herschreven naar X-Forwarded-Host $host - definieert de oorspronkelijke host die door de client is aangevraagd. X-Forwarded-Port $server_port - Definieert de originele poort die door de client is aangevraagd.

Conclusie

Je hebt geleerd hoe je Nginx kunt gebruiken als reverse-proxy. We hebben ook laten zien hoe u extra parameters aan de server doorgeeft en verschillende headervelden in proxy-aanvragen wijzigt en instelt.

nginx