我设置的 Ubuntu 20.04.3 LTS nginx 版本:nginx/1.20.2
我希望使用 nginx 作为传入 ssl 流量的反向代理。 nginx 没有证书,它使用 ssl_preread 来获取服务器名称并将其路由到后端。我有一台服务器侦听端口 80,该服务器重定向到端口 443
真的很简单而且确实有效..
我的防火墙将端口 80 和 443 转发到 nginx,后者又将流量发送到后端服务器。
我的配置:
server {listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
stream {
map $ssl_preread_server_name $name {
mosa.citystates.net other-server;
}
upstream other-server{
server 192.168.10.166:443;
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}
那么当请求中的服务器名称与流映射中的任何名称不匹配时会发生什么?我如何优雅地将这些请求发送到位桶?例如:如果我的 dns 将错误的域解析到我的 nginx 服务器,nginx 可能会收到对 abc.citystates.net 的请求,该请求与其映射中的任何名称都不匹配。这里的预期反应是什么?我得到的是来自 mosa.citystates.net 的回复,说“提供的主机名对此服务器无效”,并且它还发送了 mosa.citystates.net 证书和回复,这让我很困惑。
我的期望是与流图不匹配的东西会被丢弃。而且我也不希望它将请求转发到名称不匹配的服务器。
另请注意,如果我只是访问 nginx 服务器的 IP 地址,我会得到“无法访问此站点”,但没有证书,这与我认为应该发生的情况更加一致。
所以,我意识到这有点长了,我是 nginx 的新手,所以现在对这个问题的简洁描述有点超出了我的能力。
关于如何解决这个问题的任何想法都非常有帮助
-FG