58 votes

Configurer Nginx comme proxy inverse avec SSL en amont

J'essaie de configurer un serveur Nginx en tant que proxy inverse afin que les requêtes https qu'il reçoit des clients soient également transmises au serveur en amont via https.

Voici la configuration que j'utilise :

http {

    # enable reverse proxy
    proxy_redirect              off;
    proxy_set_header            Host            $http_host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  $proxy_add_x_forwarded_for;

    upstream streaming_example_com 
    {
          server WEBSERVER_IP:443; 
    }

    server 
    {
        listen      443 default ssl;
        server_name streaming.example.com;
        access_log  /tmp/nginx_reverse_access.log;
        error_log   /tmp/nginx_reverse_error.log;
        root        /usr/local/nginx/html;
        index       index.html;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_certificate /etc/nginx/ssl/example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
        ssl_verify_client off;
        ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers RC4:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location /
        {
            proxy_pass  https://streaming_example_com;
        }
    }
}

Quoi qu'il en soit, lorsque j'essaie d'accéder à un fichier en utilisant le proxy inverse, voici l'erreur que j'obtiens dans les journaux du proxy inverse :

2014/03/20 12:09:07 [error] 4113079#0 : *1 SSL_do_handshake() failed (SSL : error:1408E0F4:routines SSL:SSL3 pendant le handshake SSL vers l'amont, client : 192.168.1.2, server : streaming.example.com, request : "GET /publishers/0/645/_teaser.jpg HTTP/1.1", upstream : " https://MYSERVER.COM:443/publishers/0/645/_teaser.jpg ", host : "streaming.example.com"

Une idée de ce que je fais mal ?

45voto

Michael Points 423

J'ai trouvé l'erreur, je devais ajouter proxy_ssl_session_reuse off;

36voto

iBug Points 976

Dans mon cas, j'essayais de faire un reverse proxy d'un site web derrière Cloudflare. J'ai obtenu la même erreur dans /var/log/nginx/error.log . J'ai essayé de nombreuses solutions et celle-ci a fonctionné pour moi :

proxy_ssl_server_name on;

Oui, même si nous sommes en 2019, certains services ont encore besoin de SNI pour distinguer les sites hébergés.

10voto

Cela a entièrement résolu le problème pour moi :

location / {
    proxy_pass https://server2.example.com;
    proxy_set_header Host $host;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    proxy_ssl_session_reuse off;
    ...
}

J'ai également dû ajouter proxy_ssl_name afin de s'assurer que nginx sait quel nom transmettre au serveur https en amont.

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