Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Een Nginx-reverseproxy instellen op Ubuntu

Een Nginx-reverseproxy ontvangt verzoeken van websitebezoekers en stuurt ze door naar een andere server of applicatie. Deze wordt vaak gebruikt om applicaties die op poorten zoals 3000 draaien via een domeinnaam bereikbaar te maken, zonder hun interne poorten aan het internet bloot te stellen.

In deze handleiding configureer je Nginx op Ubuntu om verzoeken door te sturen naar een lokale applicatie, koppel je een domein en schakel je HTTPS in.

Wat is een Nginx-reverseproxy?

Een reverseproxy bevindt zich tussen bezoekers en je backendapplicatie.

In plaats van rechtstreeks verbinding te maken met een applicatie op poort 3000, maken bezoekers verbinding met Nginx via de standaardpoorten voor HTTP of HTTPS.

Nginx stuurt het verzoek door naar de applicatie en geeft het antwoord terug.

Het verloop van een verzoek ziet er zo uit:

Bezoeker → Nginx → Backendapplicatie

Deze opzet wordt vaak gebruikt voor Node.js, Python en andere webapplicaties. Ook kan deze TLS-terminatie, loadbalancing en gecentraliseerde verwerking van verzoeken ondersteunen.

Een VPS nodig voor je Nginx-configuratie?
Implementeer je applicaties met roottoegang en flexibele serverresources.
Bekijk VPS-abonnementen →

Vereisten

Voordat je begint, heb je het volgende nodig:

  • Een Ubuntu 24.04 LTS-server met sudo-toegang.
  • SSH-toegang tot je server.
  • Een domeinnaam die naar het openbare IP-adres van je server verwijst.
  • Een backendapplicatie die op een lokale poort luistert.

In dit voorbeeld gebruiken we poort 3000.

Als SSH nieuw voor je is, lees dan onze beginnersgids voor SSH-commando’s voordat je verdergaat.

Een Nginx-reverseproxy instellen

Stap 1: Installeer Nginx op Ubuntu

Maak via SSH verbinding met je Ubuntu-server.

Werk de pakketindex bij en installeer Nginx:

sudo apt update
sudo apt install nginx -y

Controleer of Nginx draait:

sudo systemctl status nginx

Je zou active (running) moeten zien.

Als Nginx niet is gestart, voer je het volgende uit:

sudo systemctl enable --now nginx

Je kunt ook het openbare IP-adres van je server in een browser openen. Als HTTP-toegang is toegestaan, zou de standaardwelkomstpagina van Nginx moeten verschijnen.

Als je UFW gebruikt, sta dan HTTP- en HTTPS-verkeer toe:

sudo ufw allow 'Nginx Full'

Controleer ook de firewallregels die je via je hostingprovider hebt ingesteld. Schakel de firewall niet uit om Nginx bereikbaar te maken.

Stap 2: Start een backendapplicatie om mee te testen

Voordat we de reverseproxy configureren, hebben we een applicatie nodig waarnaar Nginx verzoeken kan doorsturen.

Maak voor een eenvoudige test een tijdelijke map aan:

mkdir -p ~/nginx-proxy-test
cd ~/nginx-proxy-test

Maak een eenvoudige HTML-pagina aan:

echo '<h1>Nginx Reverse Proxy Works!</h1>' > index.html

Start nu de ingebouwde HTTP-server van Python:

python3 -m http.server 3000 --bind 127.0.0.1

Hiermee wordt je testpagina aangeboden op poort 3000, die alleen via het lokale loopback-adres bereikbaar is.

Laat deze terminal openstaan en start een tweede SSH-sessie.

Controleer of de applicatie reageert:

curl http://127.0.0.1:3000

Je zou het volgende moeten zien:

<h1>Nginx Reverse Proxy Works!</h1>

Deze Python-server dient alleen als demonstratie. Gebruik voor een productieapplicatie de aanbevolen applicatieserver en configuratie voor servicebeheer.

Stap 3: Maak een Nginx-reverseproxyconfiguratie

Maak een nieuw Nginx-serverblok aan:

sudo nano /etc/nginx/sites-available/app.example.com

Vervang app.example.com door je eigen domein.

Voeg de volgende configuratie toe:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        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;
    }
}

Sla het bestand op.

De configuratie begrijpen

  • listen 80 accepteert HTTP-verzoeken.
  • server_name geeft aan voor welk domein Nginx verzoeken moet verwerken.
  • proxy_pass stuurt verzoeken door naar de applicatie op poort 3000.
  • proxy_set_header geeft nuttige informatie over het oorspronkelijke verzoek door aan de backend.

De backend moet doorgestuurde headers begrijpen en veilig verwerken. Stel applicaties alleen zo in dat ze deze headers vertrouwen wanneer verzoeken via je vertrouwde proxy binnenkomen.

Stap 4: Schakel de configuratie in en test deze

Schakel je nieuwe serverblok in:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/

Als de link al bestaat, maak deze dan niet opnieuw aan.

Controleer de configuratie op fouten:

sudo nginx -t

Als de test slaagt, laad je de Nginx-configuratie opnieuw:

sudo systemctl reload nginx

Open nu:

http://app.example.com

Als DNS naar de juiste server verwijst en de testbackend nog draait, zou je het volgende moeten zien:

Nginx Reverse Proxy Works!

Als in plaats daarvan de standaardpagina van Nginx verschijnt, controleer dan de DNS-records van je domein en de configuratie van server_name.

Stap 5: Schakel HTTPS in met Let’s Encrypt

Gebruik voor een openbare website HTTPS in plaats van het verkeer onversleuteld te laten.

Controleer eerst of je domein naar de juiste server verwijst en of inkomend verkeer op poort 80 is toegestaan. Dit is belangrijk voor de standaardvalidatie van het certificaat via HTTP.

Installeer Certbot via de officiële methode met Snap:

sudo snap install --classic certbot

Als het commando certbot nog niet beschikbaar is, maak je de commandolink aan:

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Vraag vervolgens een certificaat aan:

sudo certbot --nginx -d app.example.com

Volg de aanwijzingen. Certbot kan een certificaat verkrijgen en Nginx configureren om je domein via HTTPS aan te bieden.

Test daarna de certificaatvernieuwing:

sudo certbot renew --dry-run

Ga naar:

https://app.example.com

Je testapplicatie zou nu via een versleutelde verbinding moeten laden.

Stap 6: Controleer je reverseproxy

Controleer het HTTPS-antwoord:

curl -I https://app.example.com

Bij de Python-backend uit het voorbeeld geeft een HTTP-antwoord 200 OK aan dat het verzoek de applicatie heeft bereikt.

Je kunt ook controleren welke processen op je server naar verbindingen luisteren:

sudo ss -ltnp

Je Nginx-installatie zou moeten luisteren op de geconfigureerde openbare HTTP- en HTTPS-poorten, terwijl de backend uit het voorbeeld luistert op 127.0.0.1:3000.

Houd er rekening mee dat de tijdelijke Python-server stopt wanneer je de bijbehorende terminalsessie beëindigt. Productieapplicaties moeten onder een procesbeheerder zoals systemd draaien.

Veelvoorkomende problemen met een Nginx-reverseproxy

502 Bad Gateway

Dit betekent meestal dat Nginx geen geldig antwoord van de backend kon ontvangen.

Controleer of je applicatie draait en of de poort in proxy_pass klopt.

504 Gateway Timeout

Een 504-fout treedt op wanneer de gateway niet op tijd het benodigde antwoord van de upstreamserver ontvangt.

Onderzoek trage applicatieverzoeken en de prestaties van de backend voordat je de time-outs verhoogt.

Het domein laadt niet

Controleer of het A-record van je domein naar het juiste openbare IP-adres verwijst, de relevante firewallpoorten openstaan en het Nginx-serverblok overeenkomt met de aangevraagde hostnaam.

Veelgestelde vragen

Wat is proxy_pass in Nginx?

proxy_pass vertelt Nginx waarheen verzoeken moeten worden doorgestuurd, bijvoorbeeld naar een HTTP-applicatie die draait op 127.0.0.1:3000.

Kan Nginx als reverseproxy voor meerdere applicaties dienen?

Ja. Je kunt verschillende domeinen, subdomeinen of URL-paden configureren om verzoeken door te sturen naar verschillende backendapplicaties.

Heb ik een domein nodig voor een Nginx-reverseproxy?

Nee. Je kunt een reverseproxy testen met een IP-adres of lokaal. Met een domein wordt het echter eenvoudiger om je applicatie openbaar aan te bieden en een standaard HTTPS-certificaat te verkrijgen.

Is een Nginx-reverseproxy gratis?

Ja. De opensourceversie van Nginx biedt reverseproxyfunctionaliteit zonder dat je een commerciële licentie nodig hebt.

Conclusie

Je hebt een Nginx-reverseproxy geconfigureerd op Ubuntu, verzoeken doorgestuurd naar een lokale applicatie en HTTPS ingeschakeld.

Je kunt dezelfde basisconfiguratie aanpassen voor Node.js, Python en andere HTTP-applicaties door het backendadres in proxy_pass te wijzigen.

Voordat je deze opzet in productie gebruikt, moet je ervoor zorgen dat je applicatie automatisch start, met passende machtigingen draait en over voldoende monitoring en beveiligingsmaatregelen beschikt.

Table of Content

Een 502 Bad Gateway-fout in Nginx betekent meestal dat Nginx geen geldig antwoord heeft ontvangen

Een 504 Gateway Timeout-fout treedt op wanneer een server die als gateway of proxy fungeert,

Een MCP-server is een programma waarmee AI-applicaties via het Model Context Protocol (MCP) verbinding kunnen

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Scroll naar boven