Proxy nginx

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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é