Proxy nginx
| Fiche express | |
|---|---|
| Type | Configuration reverse proxy (bloc server + proxy_pass)
|
| Voir aussi | Nginx · Varnish-php-fpm-nginx · Certbot |
Nginx en reverse proxy : le client se connecte à Nginx, qui transmet la requête à une
application backend (écoutant en local ou sur le réseau interne) et relaie la réponse. Cette
page complète Nginx avec des exemples concrets de blocs server.
Configuration de base
server {
listen monhote:80;
server_name monhote;
location / {
root /chemin/vers/monapp/public;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://monapp:8080;
}
}
Les en-têtes X-Forwarded-* transmettent au backend des informations perdues par le
relais (hôte demandé à l'origine, adresse IP réelle du client) — indispensables si
l'application backend a besoin de connaître le client d'origine plutôt que l'IP de Nginx.
Exemple : proxy vers une application locale, TLS terminé par Nginx
Ici, Nginx termine le TLS sur le port 443 et relaie en clair vers une application backend en local (port 8181). Le port 8080 en écoute loopback sert de source pour un cache Varnish placé devant (voir cette page pour l'architecture complète) : attention à ne pas confondre les deux — le 443 est directement exposé côté client, le 8080 est un port interne pour Varnish.
server {
listen 127.0.0.1:8080;
server_name app.exemple.tld;
listen 443 ssl;
http2 on;
ssl_certificate /etc/nginx/ssl/wiki.exemple.tld.crt;
ssl_certificate_key /etc/nginx/ssl/wiki.exemple.tld.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:10m;
# add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "HIGH:!aNULL:!MD5";
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8181;
}
}
Deux corrections apportées par rapport à un exemple ancien fréquemment recopié : la directive
spdy (ex. listen 443 ssl spdy;) est obsolète et a été retirée de
Nginx (remplacée par http2, activé ici via http2 on;) ; la liste de
suites de chiffrement historique incluant RC4/3DES a été retirée au
profit d'une liste moderne — voir Securiser nginx pour le détail du durcissement TLS.
Voir aussi
- Nginx — présentation générale et structure de configuration
- Varnish-php-fpm-nginx — architecture complète avec cache Varnish en frontal
- Certbot — obtention automatisée du certificat TLS utilisé ici
- Securiser nginx — durcissement TLS détaillé