我们有一个具有公共IPv4地址的虚拟机,我们的example.com
和*.example.com
域指向该虚拟机。
我们有几台分布式低技术计算机,与可公开访问的虚拟机建立有线连接/隧道。
我们希望虚拟机能够在端口80
/443
上服务网站,通过端口22
接受ssh连接,等等。
我们希望通过low-tech-01.example.com
、low-tech-02.example.com
等相应的子域和代理/路由请求向各自的本地/有线IP地址公开访问低技术计算机。这应该适用于通过端口80
/443
、ssh连接通过端口22
等的网站。
编辑:理想的是,SSL证书应该从低技术的计算机上提供,并且SSL连接不应该终止在虚拟机上。
编辑:理想情况下,用于建立与低技术计算机连接的ssh私钥不应该存在于虚拟机上,而只存在于客户端上。
编辑:对于ssh,我们可以为每台低技术计算机打开并路由一个唯一的端口,从public_IPv4:22xxx
到local/wireguard_IP:22
。
不幸的是,在对nginx配置进行了两天的尝试和错误之后,我们发现这个任务可能无法由nginx单独解决。
注意: ssh不发送SNI;nginx不能监听http
和stream
连接的相同端口;可能还有更多的问题。
但同时,我们完全没有想法,无法用哪种方法来正确地解决这个问题。
(www\.)?example.com
->公共IPv4 ->网站,ssh等。
low-tech-01.example.com
-> public IPv4 -> ??~> 10.0.0.101
->网站,ssh等。
low-tech-02.example.com
-> public IPv4 -> ??~> 10.0.0.102
->网站,ssh等。
…
谢谢你的建议和时间。
-
编辑:下面的nginx stream
配置接近我们想要实现的目标。(也许)唯一的缺点是,我们必须手动为每台低技术计算机定义一个端口,而不是像SSL连接那样动态地处理这个端口。
stream {
map $ssl_preread_server_name $name {
example.com example.com;
www.example.com example.com;
low-tech-01.example.com low-tech-01.example.com;
low-tech-02.example.com low-tech-02.example.com;
}
upstream example.com {
server 127.0.0.1:8443;
}
upstream low-tech-01.example.com {
server 10.0.0.101:443;
}
upstream low-tech-02.example.com {
server 10.0.0.102:443;
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
server {
listen 22101;
proxy_pass 10.0.0.101:22;
}
server {
listen 22102;
proxy_pass 10.0.0.102:22;
}
…
}
发布于 2021-10-14 06:34:49
您需要在服务器上获得多个IP地址,每个要使用的子域都有一个IP地址。
然后,您需要为每个VM分配一个公共IP地址。之后,您可以将子域绑定到IP地址。在VM中,可以将端口转发到您想要的最终目的地。
https://serverfault.com/questions/1080481
复制相似问题