NGINX as a Reverse Proxy (listening on port 80)
Inhoudsopgave:
- voorwaarden
- Nginx gebruiken als reverse-proxy
- Headers voor aanvraag doorgeven
- Nginx configureren als een reverse-proxy voor een niet-HTTP-proxy-server
- Gemeenschappelijke Nginx Reverse Proxy-opties
- Conclusie
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
.
/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 enkeepalive
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
enConnection "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 naarX-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.
nginxE-maillijst Leverancier: onze archieven zijn nauwkeurig E-mailapplicaties, een databasebedrijf, houden de gegevens bij nadat ze ervan zijn beschuldigd een bunk e-mail lijst naar Javelin ... Een bedrijf beschuldigd van slechte zakelijke praktijken voor het vermeend verkopen van een bunk e-maillijst gebruikt voor een marketing campagne handhaaft dat de gegevens goed zijn.

Het geschil tussen Emailappenders en Javelin Marketing biedt een interessante kijk op hoe marketingbedrijven aan de goede kant van de wetgeving moeten blijven, zoals de CAN-SPAM-act in de VS, en hoe e-mail big business is, niet alleen voor spammers. Google heeft beleidsbeheerfuncties voor gebruikersgroepen toegevoegd aan het door Apps gehoste communicatie- en samenwerkingspakket. De worm, Stuxnet genaamd, werd vorige maand voor het eerst gezien toen het systemen infecteerde bij een niet-geïdentificeerde Iraanse organisatie, volgens Sergey Ulasen, hoofd van het antivirusprogramma. kernelafdeling bij VirusBlokAda, in Minsk, Wit-Rusland. Het niet-geïdentificeerde slachtoffer, dat geen eigenaar is van het type SCADA-systeem (toezichtcontrole en gegevensverzameling) dat door de worm wordt getarget, "vertelde ons dat hun werkstations serieel opnieuw werden opgestart zonder eniGoogle laat toe dat apps beheerders instellen Gebruiksbeleid voor groepen instellen
Siemens: Duitse klant getroffen door industriële worm