web-dev-qa-db-fra.com

nginx proxy_pass à https

Je voudrais donc envoyer des requêtes proxy_pass à un serveur backend https, cependant, chaque fois que j'essaye de recharger le serveur nginx avec le backend configuré https: //, j'obtiens l'erreur suivante:

nginx: [emerg] https protocol requires SSL support

Ceci est la configuration nginx

server{

    listen 8080;

    root /opt/nginx_1.17.0/nginx_ok/html;
    server_name www.frontedndomain.com;

    index index.php index.html;

            location /health-monitor/ {
                    add_header Custom-Header test;
            }

            location ~* ^\/([a-z][a-z]\/)?abc\/?(.*)? {
                    error_log /opt/nginx_1.17.0/nginx_ok/logs/proxy_error.log;
                    add_header X-query-string $is_args$query_string;
                    resolver 0.0.0.0;
                    resolver_timeout 15s;
                    proxy_pass https://backenddomain.com;
                    proxy_ssl on;
                    proxy_http_version 1.1;
                    proxy_set_header Accept-Encoding "";
                    proxy_set_header Cache-Control no-cache;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection 'upgrade';
                    proxy_set_header X-Real-IP $remote_addr;
                    subs_filter_types *;
           }
    }

À l'origine, j'ai construit nginx pour la source et c'est la sortie de nginx -V

version nginx: nginx/1.16.0 construit par gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure les arguments: --prefix =/opt/nginx_1.17.0/nginx_ok/--sbin-path =/opt/nginx_1.17.0/nginx_ok/sbin/nginx --with-openssl =/opt/nginx_1.17.0/openssl-1.1.1c/--add-module =/opt/nginx_1.17.0/ngx_http_substitutions_filter_module/--with-zlib =/opt/nginx_1.17.0/zlib-1.2.11 /

Quelqu'un peut-il décrire ce qui me manque dans cette configuration, s'il vous plaît. Je voudrais également transmettre une chaîne de requête au backend.

2
joebegborg07

Le problème a été résolu en ajoutant la directive suivante

proxy_ssl_server_name on;

Cela a permis à la demande d'être gérée par le serveur spécifié dans le SNI du certificat au point de terminaison en amont.

2
joebegborg07

Vous écoutez sur un port 8080 sans SSL (http) et essayez de proxy vers un hôte compatible SSL sur le port 443 (https). si cela fonctionnait, cela rendrait essentiellement le chiffrement inutile car il ne serait chiffré que de votre côté et non pendant que les paquets sont en transit vers votre client. La solution consiste à vous assurer que les certificats sont installés et que SSL est activé pour le port en question et que tout proxy_pass ne transfère pas des ports non compatibles SSL vers des ports compatibles SSL.

1
Aslan Varoqua