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:
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