我正在尝试配置 Nginx 以支持使用 TLS-ALPN-01 的 Let's Encrypt脱水。在他们的文档中,他们有以下内容告诉 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
?我必须加载另一个模块吗?
答案1
我找到了解决方案另一个网站。
如果您希望 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;
}
}
现在一切正常,我可以无停机时间生成/更新证书!
答案2
map
必须在stream
块内,不能在server
块内。
看起来好像有一个server
块包含另一个server
块,这也不起作用。