Offloading SSL avec Nginx

Configuration de base pour effectuer de l’offloading SSL avec Nginx.

Les header défini avec proxy_set_header pourront être utilisé au niveau du backend pour effectuer, par exemple, des redirection http vers https

server {
  listen   443 ssl; ## listen for ipv4
  server_name domaine.ltd;
  ssl                     on;
  ssl_prefer_server_ciphers on;
  ssl_protocols           SSLv3 TLSv1 TLSv1.1 TLSv1.2; #libssl > 1.0
  ssl_ciphers             RC4:HIGH:!MD5:!ADH:+DH; #HIGH:!ADH:!MD5:@STRENGTH;
  ssl_session_cache       shared:TLSSL:16m;
  ssl_session_timeout     10m;
  ssl_certificate         /etc/nginx/domaine.ltd.crt;
  ssl_certificate_key     /etc/nginx/domaine.ltd.key;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-By $server_addr:$server_port;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://backend;
  }

}

Article complémentaire : Redirection http vers https derrière un reverse proxy

Redirection http vers https derrière un reverse proxy

Pour que cela fonctionne, le reverse proxy doit définir dans le header X-Forwarded-Proto si la requête était en http ou https

La règle de réécriture apache pour forcer l’https :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule / https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Ou au contraire si l’on veut forcer en http :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !http
RewriteRule / http://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Article complémentaire : Offloading SSL avec Nginx