Configurer Nginx en tant que proxy inverse avec SSL en amont

40

J'essaie de configurer un serveur Nginx en tant que proxy inverse afin que les demandes 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 à l'aide d'un proxy inverse, c'est l'erreur que je rencontre dans les journaux du proxy inverse:

2014/03/20 12:09:07 [erreur] 4113079 # 0: * 1 SSL_do_handshake () a échoué (SSL: erreur: 1408E0F4: routines SSL: SSL3_GET_MESSAGE: message inattendu) lors de l'établissement d'une liaison SSL en amont, client: 192.168.1.2, serveur: streaming.example.com, requête: "GET /publishers/0/645/_teaser.jpg HTTP / 1.1", en amont: " https://MYSERVER.COM:443/publishers/0/645/_teaser.jpg " , hôte: "streaming.example.com"

Une idée de ce que je fais mal?

Alex Flo
la source
Avez-vous essayé sans utiliser le upstreammodule en plaçant directement WEBSERVER_IP dans la directive proxy_pass pour voir si vous obtenez la même erreur?
Benoit
Non, je n'ai pas essayé cela, mais comme expliqué ci-dessous, l'option proxy_ssl_session_reuse off;a fonctionné comme prévu.
Alex Flo
10
Veuillez supprimer SSLv3 des protocoles pris en charge. Ce n'est pas sécurisé et vous ne devriez pas l'utiliser: ssl_protocols SSLv3
user220703

Réponses:

30

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

Alex Flo
la source
1
Merci. Pour ceux qui pourraient encore avoir des problèmes après avoir utilisé cette configuration, pensez à utiliser https au lieu de simplement http au début de l'URL indiquée en tant que paramètre dans proxy_pass. Sinon, nginx ne chiffrera pas le trafic envoyé en amont et vous obtiendrez toujours le même message d'erreur.
Lucio Mollinedo
1

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

proxy_ssl_server_name on;

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

iBug
la source