如何更正'nginx:[emerg]";流";此处不允许使用指令'



问题

为什么以下Nginx配置返回nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/default:1

Nginx配置

stream {
map $ssl_preread_server_name $upstream {
example.com 1051;
}
upstream 1051 {
server 127.0.0.1:1051;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
}

版本/内部版本信息

操作系统:Debian 10

这是精简的nginx -V输出,确认了我知道我需要的模块的存在。。。

nginx version: nginx/1.14.2
TLS SNI support enabled
configure arguments: ... --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module ...

上下文

我只有一个静态IP地址。在静态IP地址上,我正在设置一个反向代理Nginx服务器,将流量转发到各种后端服务。其中一些服务是具有唯一域名的网站。

+-----+        +----------------------+        +---------+
| WAN | <----> | Nginx Reverse Proxy  | <----> | Service |
+-----+        +----------------------+        +---------+

在启动时,该服务使用systemd运行此端口转发ssh命令以连接到反向代理:ssh -N -R 1051:localhost:443 tunnel@example.com(工作正常。(

我希望证书驻留在服务上,而不是反向代理。据我所知,我需要利用Nginx上的SNI来通过基于域名的SSL连接。但是我无法让Nginx反向代理通过SSL。

资源

以下是我仔细研究过的一些资源。。。

  • https://serverfault.com/questions/625362/can-a-reverse-proxy-use-sni-with-ssl-pass-through
  • https://nginx.org/en/docs/stream/ngx_stream_core_module.html
  • https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html
  • https://www.amitnepal.com/nginx-ssl-passthrough-reverse-proxy
  • https://serverfault.com/questions/1049158/nginx-how-to-combine-ssl-preread-protocol-with-ssl-preread-server-name-ssh-mul

问题是我试图在http块中嵌入stream块。我没有正确地说明/etc/nginx/nignx.conf文件中的include

最新更新