Nginx configure l’équilibreur de charge SSL

J’ai un serveur Docker où j’ai installé GitLab à partir de sameersbn / docker-gitlab

J’ai un conteneur nginx qui écoute 443: 433 et 80:80, je vais utiliser celui-ci pour charger la balance des requêtes HTTP et HTTP (avec signature certifiée)

nginx.conf

worker_processes auto; events { worker_connections 1024; } http { ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; upstream gitlab { server gitlab:10080; } server { listen 80; listen 443 ssl; server_name www.domain.tld; ssl on; ssl_certificatee /usr/local/share/ca-certificatees/domain.crt; ssl_certificatee_key /usr/local/share/ca-certificatees/domain.key; ssl_trusted_certificatee /usr/local/share/ca-certificatees/GandiStandardSSLCA2.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; root /usr/share/nginx/html; location /git/ { proxy_pass http://gitlab; proxy_set_header X-Forwarded-Ssl on; 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; } } 

Sans SSL, l’url de travail pour accéder à gitlab est http: //www.domain.tld: 10080 / git

Avec SSL, je veux que l’URL soit https: //www.domain.tld/git

Utilisation de cette configuration d’équilibreur de charge nginx

Quand je vais sur http: //www.domain.tld/git

 400 Bad Request The plain HTTP request was sent to HTTPS port 

Quand je vais sur https: //www.domain.tld/git

 ERR_CONNECTION_REFUSED 

Ce sont mes premiers certificates signés, comment cela fonctionne-t-il?

Pour résoudre le problème, deux étapes sont requirejses:

  1. faire que Nginx redirige HTTP vers HTTPS
  2. Faire Gitlab pour écouter le port 80 via HTTP

Pourquoi faire Gitlab pour écouter le port 80? Cette technique appelée déchargement SSL empêche le cryptage / décryptage HTTPS redondant entre l’amont et le serveur Web. Il est rarement requirejs et n’a de sens que pour des hôtes différents ayant des exigences de sécurité complexes.

Nginx

 server { listen 80; server_name www.domain.tld; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name www.domain.tld; [....] 

}

Gitlab

 vi ./gitlab/config.yml gitlab_url: "http://server1.example.com" # http rather than https