使用 NGINX,我有多个反向代理,它们适用于各种网站的正常 http(s)。我只有一个公共 IP 地址,但后面有多个虚拟主机。这部分工作正常。
我想要 ssh 进入 nginx 后面的所有主机,目前只有三个,但将来会有更多的主机。
由于 nginx 高于 1.9.1 版本,我认为该版本允许我开始为 ssh 配置流,稍后我将添加数据库和邮件,但现在 ssh 是优先事项。
因此,首先我将 ssh_available 和 ssh_enabled 添加到 nginx 目录。
/etc/nginx/nginx.conf 我添加了以下内容:
stream {
include /etc/nginx/ssh_enabled/*;
}
/etc/nginx/ssh_available/domain.com.rproxy.conf 我有以下内容:
upstream ssh {
server 192.168.1.61:22;
}
server {
listen 22;
proxy_pass ssh;
}
我使用了通常的方法,将 ssh_enabled 中的符号链接添加到 ssh_available 中的 conf 文件中。
这使得我能够 ssh 进入位于我的 nginx 反向代理后面的一个主机,但只能进入一个主机。
在当前配置下,无论我使用公共 IP、子域还是 fqdn,SSH 连接始终登陆同一主机。
我怎样才能将其转变为更可移植的东西,以便它可以与多个主机/域名一起使用,而不仅仅是单个 IP/域?
我想要的是使用域通过 ssh 连接到托管它的服务器。
答案1
我想到了一个解决方法,这意味着开放的端口比我想要的要多,因为到目前为止 ssh 不接受域名,虽然有一个 IPV6 解决方案,但这对我来说目前不是一个解决方案。
因此需要更多的端口。
这是我的解决方案。将一个小的端口范围转发给 nginx,每个服务器的端口都足够了。您可以选择几乎任何端口范围,也可以根据您的选择进行挑选,但为了使此示例尽可能简单,范围更简单。
我修改了在 /etc/nginx/ssh_available/ 中创建的 conf 文件
upstream 59 {
server 192.168.1.59:22;
}
server {
listen 22059;
proxy_pass 59;
}
upstream 61 {
server 192.168.1.61:22;
}
server {
listen 22061;
proxy_pass 61;
}
upstream 62 {
server 192.168.1.62:22;
}
server {
listen 22062;
proxy_pass 62;
}
upstream 63 {
server 192.168.1.63:22;
}
server {
listen 22063;
proxy_pass 63;
}
当然,这样您会受到网络上可用 IPV4 地址数量的限制,IPV6 会是更好的选择,但我还没有。
请注意,如果您按原样使用此示例,则您将通过将内部 IP 作为端口号提供给任何可能想要解决此问题的人来宣传您的网络基础架构的一部分。您应该真正挑选要打开的端口并适当地设置配置。
最后,在我看来这不是一个好答案,但它是一个可行的答案,因此我发布了它,但不接受它作为解决方案。您可能有比我想出的更好的 IPV4 方法,我非常欢迎您的回答。