Reverse proxy Nginx TLS

Petit mémo pour une configuration de reverse proxy sous nginx permettant de présenter en TLS (https) le site web d’un autre serveur non TLS.

Le serveur srvA.example.net est le virtualhost sur le serveur reverse proxy frontend.

Le serveur srvB.example.net est le serveur d’application web backend.

# Le serveur http sur le port 80
server {
  listen [::]:80; # ipv6
  listen 80; # ipv4
  server_name srvA.example.net;
  # redirection du traffic http vers https
  return 301 https://srvA.example.net$request_uri;
}

# le serveur https sur le port 443
server {
  listen 443; #ipv4
  listen [::]:443; #ipv6

  server_name srvA.example.net;
  # la configuration ssl via des includes (paramétrages des certificats et diverses options de sécurité)
  include snippets/ssl-progivet.net.conf;
  include snippets/ssl-params.conf;

  # partie reverse proxy
  location / {
    proxy_pass http://srvB.example.net:80;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_set_header        Accept-Encoding   "";
    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;
    add_header              Front-End-Https   on;

    proxy_redirect          off;
  }
}