Nginx

如何獲得 ssl_preread_alpn_protocols 用於使用 nginx 1.14 的 acme-tls 請求?

  • March 18, 2019

我正在嘗試配置 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. 然後我更新了添加的配置:

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;
   }
}

現在一切正常,我可以在不停機的情況下生成/更新證書!

引用自:https://serverfault.com/questions/958832