Probleem: Doorsturen van Query String Parameters in Nginx
Bij het gebruik van Nginx als een reverse proxy kan het doorsturen van query string parameters van het oorspronkelijke verzoek naar de backend server moeilijk zijn. Dit probleem doet zich vaak voor bij het instellen van de proxy_pass directive, omdat het standaardgedrag deze parameters niet altijd behoudt.
Implementeren van Query String Doorsturen in Nginx Proxy_Pass
Methode 1: Gebruik van een Eenvoudig Location Block
De location block benadering biedt een manier om query string parameters door te sturen in Nginx. Deze methode gebruikt een location directive met een trailing slash in de proxy_pass statement.
Configuratiestappen:
- Open je Nginx configuratiebestand.
- Voeg het location block toe of wijzig het:
location /service/ {
proxy_pass http://apache/;
}
- De trailing slash in
proxy_pass http://apache/;vertelt Nginx om/service/te vervangen door/bij het doorsturen van het verzoek. - Deze configuratie stuurt query string parameters door zonder extra aanpassingen.
Tip: Testen van Query String Doorsturen
Om te testen of het doorsturen van query strings correct werkt, kun je een tool zoals curl of de ontwikkelaarstools van je browser gebruiken. Probeer een URL met query parameters te openen, zoals: http://your-domain.com/service/page?param1=value1¶m2=value2. Controleer of deze parameters correct worden doorgestuurd naar je backend server.
Methode 2: Gebruik van Reguliere Expressies met Query Parameters
Voor complexe scenario's biedt het gebruik van reguliere expressies met query parameters meer flexibiliteit.
Configuratiestappen:
- Open je Nginx configuratiebestand.
- Voeg het location block toe of wijzig het met behulp van een regex:
location ~* ^/service/(.*) {
proxy_pass http://apache/$1$is_args$args;
}
- De
~*geeft een hoofdletterongevoelige reguliere expressie match aan. ^/service/(.*)vangt alles na/service/in de URL.$1in de proxy_pass verwijst naar de gevangen groep.$is_args$argsvoegt de query string toe aan de geproxyde URL.
Deze methode biedt meer controle over URL herschrijven terwijl query string parameters behouden blijven.
Aanvullende Overwegingen voor Nginx Proxy_Pass Setup
Behouden van Originele Verzoeksinformatie
Bij het gebruik van proxy_pass is het belangrijk om het oorspronkelijke verzoek intact te houden. Hier zijn enkele manieren om dit te doen:
-
Gebruik proxy_set_header directives:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;Deze headers sturen de informatie van de oorspronkelijke client naar de backend server.
-
Schakel proxy_buffering in:
proxy_buffering on;Dit laat Nginx responses van de backend server bufferen, wat de prestaties verbetert.
-
Stel timeouts in:
proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s;Deze instellingen beheren verbindingstijden tussen Nginx en de backend server.
Tip: Behoud URL Pad
Om het oorspronkelijke URL pad te behouden bij het proxyen van verzoeken, gebruik de $request_uri variabele:
location /api/ {
proxy_pass http://backend$request_uri;
}
Dit zorgt ervoor dat het volledige pad na /api/ naar de backend server wordt gestuurd.
Omgaan met SSL/TLS in Proxy Configuraties
Voor veilige proxy_pass setups, overweeg deze practices:
-
Gebruik SSL/TLS voor backend verbindingen:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass https://backend; proxy_ssl_verify on; proxy_ssl_trusted_certificate /path/to/trusted_ca_cert.pem; } }Deze config gebruikt HTTPS voor de proxy_pass verbinding en controleert het certificaat van de backend server.
-
Stel SSL protocollen en ciphers in:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;Deze instellingen beperken de SSL/TLS protocollen en ciphers tot veilige opties.
-
Schakel HSTS (HTTP Strict Transport Security) in:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;Deze header vertelt browsers om altijd HTTPS te gebruiken voor je domein.





