Назад | Перейти на главную страницу

nginx proxy_pass на https

Поэтому я хотел бы отправлять запросы proxy_pass на бэкэнд-сервер https, однако каждый раз, когда я пытаюсь перезагрузить сервер nginx с https: // настроенным бэкэндом, я получаю следующую ошибку:

nginx: [emerg] https protocol requires SSL support

Это конфигурация 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 *;
           }
    }

Первоначально я создавал nginx для источника, и это результат nginx -V

Версия nginx: nginx / 1.16.0 построен с помощью gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) аргументы конфигурации: --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 /

Кто-нибудь может рассказать, что мне не хватает в этой конфигурации, пожалуйста. Я хотел бы также переслать строку запроса на бэкэнд.

Проблема была решена путем добавления следующей директивы

proxy_ssl_server_name включен;

Это позволило обработать запрос сервером, указанным в SNI сертификата, в конечной точке восходящего потока.

Вы прослушиваете порт 8080 без SSL (http) и пытаетесь прокси-сервером к хосту с поддержкой SSL на порту 443 (https). если бы это сработало, это существенно сделало бы шифрование бессмысленным, поскольку оно шифровалось бы только на вашей стороне, а не во время передачи пакетов вашему клиенту. Решение состоит в том, чтобы убедиться, что у вас установлены сертификаты и включен ssl для рассматриваемого порта, и что любой proxy_pass не перенаправляет с портов, не поддерживающих ssl, на порты с поддержкой ssl.