如何获取与 nginx 1.14 配合使用的 acme-tls 请求的 ssl_preread_alpn_protocols?

如何获取与 nginx 1.14 配合使用的 acme-tls 请求的 ssl_preread_alpn_protocols?

我正在尝试配置 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块,这也不起作用。

相关内容