![当数据流被 Nginx 代理时会发生什么?](https://linux22.com/image/746586/%E5%BD%93%E6%95%B0%E6%8D%AE%E6%B5%81%E8%A2%AB%20Nginx%20%E4%BB%A3%E7%90%86%E6%97%B6%E4%BC%9A%E5%8F%91%E7%94%9F%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我有这个 nginx 配置:
stream {
upstream ssh {
server 192.168.29.139:22;
}
upstream web {
server 192.168.29.139:444;
}
map $ssl_preread_protocol $upstream {
"" ssh;
default web;
"TLSv1.2" web;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
}
它是 nginx Docker 容器和本地 OpenSSH 服务器的代理。我在这台机器上只打开了一个端口 - 443。它运行良好:我可以在 443 上使用 ssh 并在浏览器中通过 https 访问网站。
但我想知道数据会发生什么?例如,当我通过 SSH 连接时,我仍然保持连接并通过 nginx 代理工作?这对连接有害吗?由于实际上有两个 Nginx 服务器在线,这会降低我网站的连接速度吗?
答案1
当你打开与该 Nginx 的连接时,如果你的客户端没有发起某些 TLS 握手,那么它将被视为一个新的 SSH 会话,并转发到你的 ssh 上游,否则它将被发送到你的 Web 服务器。
这对连接来说“不好”吗?其实不是。取决于你认为什么是不好。
它充当 TCP 中继。与直接访问的主要区别在于,从您的 SSH 容器的角度来看,所有连接都将从您的反向代理 IP 建立。
因此,如果您使用类似的fail2ban
或任何类型的 IP 过滤,那么这将不起作用,您可能必须考虑IDS/IPS
在 Nginx 容器前面或旁边设置一些。
不过,这可能不是你的情况。除此之外,直接访问应该没有太大区别。