Я пытаюсь настроить 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
блок, который тоже не сработает.