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

Как получить ssl_preread_alpn_protocols для запроса acme-tls, работающего с nginx 1.14?

Я пытаюсь настроить Nginx для поддержки Let's Encrypt с TLS-ALPN-01, используя обезвоженный. В их документации есть следующее, чтобы указать Nginx для балансировки нагрузки направить запрос на сервер, который может обслуживать вызов TLS-ALPN-01. Это конфигурация Nginx:

stream {
  server {
    map $ssl_preread_alpn_protocols $tls_port {
      ~\bacme-tls/1\b 10443;
      default 443;
    }

    server {
      listen 443;
      listen [::]:443;
      proxy_pass 10.13.37.42:$tls_port;
      ssl_preread on;
    }
  }
}

Когда я положил это в свой /etc/nginx/nginx.conf он жаловался на директиву потока. Я нашел некоторую информацию, в которой говорилось, что нужно добавить эту строку в начало моей конфигурации:

load_module /usr/lib/nginx/modules/ngx_stream_module.so;

Это избавило от жалобы, но с такой конфигурацией:

load_module /usr/lib/nginx/modules/ngx_stream_module.so;
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

stream {
  server {
    map $ssl_preread_alpn_protocols $tls_port {
      ~\bacme-tls/1\b 10443;
      default 443;
    }

    server {
      listen 443;
      listen [::]:443;
      proxy_pass 10.13.37.42:$tls_port;
      ssl_preread on;
    }
  }
}

Я получаю эту ошибку

nginx: [emerg] "map" directive is not allowed here in /etc/nginx/nginx.conf:13
nginx: configuration file /etc/nginx/nginx.conf test failed

Итак, что мне нужно сделать, чтобы правильно получить это map работает? Нужно ли мне загружать другой модуль?

Я нашел решение на другой сайт.

Если вы хотите, чтобы nginx балансировал нагрузку на запросы ALPN к вашему респонденту ALPN и нормальный трафик https в другом месте, вы должны начать сообщать своим обычным серверам https прослушивать альтернативный порт (т.е.не: 443).

Следуя руководству, во всех моих объявлениях сервера в /etc/nginx/sites-enabled Я изменился :443 к :3443. Затем обновил добавленный конфиг:

stream {
    map $ssl_preread_alpn_protocols $tls_port {
      ~\bacme-tls/1\b 10443;
      default 3443;
    }

    server {
      listen 443;
      listen [::]:443;
      proxy_pass 127.0.0.1:$tls_port;
      ssl_preread on;
    }
}

Теперь все работает A-OK, и я могу генерировать / обновлять сертификаты без простоев!

map должен быть в stream блок, а не в server блок.

Также похоже, что у вас есть server блок внутри другого server блок, который тоже не сработает.