如何更正'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。

资源

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

解决方法

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...