4 votes

Équilibrage de charge NGINX : nom ssl en amont

J'ai la configuration Nginx suivante pour équilibrer la charge entre les différents nœuds. Cependant, lorsque j'essaie de rediriger le trafic, j'obtiens 502 Mauvaise passerelle .

En lisant le journal des erreurs, j'ai découvert que le problème est lié au fait que mon équilibreur de charge Nginx essaie de vérifier la validité du certificat X509. PAS pour les différents nœuds ( backend1.example.com,backend2.example.com ), mais pour le nom de l'amont backend.example.com (sans le numéro) ce qui entraîne l'erreur suivante.

Comment puis-je dire à nginx d'utiliser le nom d'hôte du nœud transféré, au lieu de celui du nœud en amont ?

LOG D'ERREUR :

upstream SSL certificate does not match "backend.example.com" while SSL handshaking to upstream...

CONFIGURATION :

upstream backend.example.com {
   least_conn;
   server backend1.example.com:443
   server backend2.example.com:443
}
server {

        listen [::]:443 ssl ipv6only=on;
        listen 443 ssl;
        server_name example.com;

        location / {
                proxy_pass https://backend.example.com;

                proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
                proxy_ssl_session_reuse on;
                proxy_ssl_verify       on;
                proxy_ssl_verify_depth 2;
                proxy_set_header Host $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

4voto

Catherine Points 2400

La directive ngx_http_proxy_module dont vous avez besoin est proxy_ssl_name

Vous pouvez résoudre ce problème de plusieurs manières :

  1. Essayez de le régler proxy_ssl_name $proxy_host;

  2. Utiliser un certificat ssl de type "wildcard".

  3. S'il s'agit d'un réseau interne, utilisez la connexion http en amont sans double cryptage excessif et autorisez la connexion http en amont uniquement à partir de votre serveur proxy inverse.

  4. Placez le même certificat en amont sur chaque nœud et définissez-le pour un nom attendu. proxy_ssl_name backend.example.com;

1voto

Sveatoslav Points 101

Según nginx vous devez partager le même certificat TLS entre tous les serveurs backend. Voir le rapport de bogue suivant https://trac.nginx.org/nginx/ticket/1307#comment:5

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X