我目前正在尝试了解 Nginx 并需要一些指导;这对我来说很新,所以如果这个问题已经得到解答,请原谅(我确实先搜索了!)。
场景:我在 Ubuntu VM 上(每个 VM 1 个)拥有一台 Seafile 服务器(cloud.example.com)和一台 Zammand 服务器(support.example.com),我已使用 Certbot 为它们提供 SSL。我显然可以运行其中任何一台 SSL 服务器,但由于两者都使用端口 443,因此我现在无法正确使用 Ngnix,从而出现问题。
我的第一个问题是,我是否可以有另一个纯粹用于 Ngnix 的 VM,它将 URL 请求传递给其他 VM,或者我是否需要在同一台服务器上同时使用 Seafile 和 Zammand 来对两者都使用 Ngnix/SSL?(我目前已在一台 VM 上安装了两者以进行测试)。
如果我从一台服务器运行(安装了 Seafile 和 Zammand - 尽管我更喜欢在各自的 VM 上安装它们),我假设我只需要编辑我的“/etc/nginx/sites-available/default”并在那里添加路由路径?目前我有 3 个“sites-available”- Seafile、Zammand 和 default。我看到有“sites-active”,目前是“seafile”。因此 cloud.example.com 和 support.example.com 都路由到 seafile(cloud.example.com)
或者我完全误解了这一点?欢迎提出任何建设性建议!如果我没有描述得很清楚,请原谅。
答案1
最好的办法是创建第三个虚拟机并在其中设置 nginx。您也可以在任一现有虚拟机上进行设置。
完成后,您需要配置 nginx,使用多个“服务器”条目,每个您正在服务的域一个,并指向不同的后端。
网络上有很多关于如何操作的不同教程。
答案2
所以您有两个独立的服务器,对吗?如果是这样,那么您需要使用类似 SNI 检查之类的工具来确定将连接代理到哪个主机。从 nginx 1.11.5 开始,无需终止 SSL 连接即可完成此操作ngx_stream_ssl_preread_module
。
您需要配置 ProxyPass 指令以允许它将数据发送到代理后面的远程系统。然后,您需要确保 Nginx 主机在互联网上,以便所有查询都首先通过它。
通过使用 SNI 检查和 TCP 流代理,远程服务器直接处理其所有 SSL 连接,nginx 仅代理来自一个 IP 端点的流量。
我也会检查一下:https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
具体解决使用 TCP Stream 代理时的 SNI 检查:http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html在实际处理握手之前,TLS 握手期间就包含了 SNI,因此这允许 nginx 将流量发送到正确的端点,并允许该端点实际执行 TLS 握手。