我正在尝试配置 Nginx 以支持 Let's Encrypt with TLS-ALPN-01 using dehydrad。在他们的文档中,他们有以下内容告诉 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
. 然后我更新了添加的配置:现在一切正常,我可以在不停机的情况下生成/更新证书!
map
必须在stream
块中,而不是在server
块中。看起来您
server
在另一个server
块中也有一个块,这也不起作用。