![多个 Web 应用程序 - 同一 VM 与多个 VM](https://linux22.com/image/699701/%E5%A4%9A%E4%B8%AA%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%20-%20%E5%90%8C%E4%B8%80%20VM%20%E4%B8%8E%E5%A4%9A%E4%B8%AA%20VM.png)
首先,我更像是一名开发人员,而不是管理员。我问了同样的问题这里。但是,如果有更好的地方可以提出这个问题,请告诉我。
这是我的情况。我有一个专为在 Linux 上运行而构建的应用程序。它同时提供 https(使用 nginx 在端口 443 上)和 ssh(在端口 22 上)。但由于组织限制,我被迫在 Windows 主机上运行它,并使用虚拟盒运行 Linux 客户机。此外,主机盒上还有另一个 Web 应用程序;这两个 Web 应用程序都应基于 URL 提供服务(例如:app1.com、app2.com)。需要保留 URL。所有 ssh 流量都可以默认为客户机。
以下是我实现此目标的一个想法,我想知道我是否让这件事变得比它应该的更复杂。任何帮助都值得感激。
脚步:
- 在我的主机上使用未使用的 https 端口(例如 8443)并将所有流量重定向到客户机。在 Virtualbox 中使用基于 NAT 的端口转发(8443 -> 443,22 -> 22)。
- 剩下的唯一一件事就是在主机上设置另一个 nginx 作为反向代理。在 Windows 上设置虚拟主机 (/etc/hosts),并拥有两个 IP 和 URL 条目 (app1.com 和 app2.com)。在主机上使用单独的 nginx 作为反向代理,将 app1 流量重定向到主机上的 Web 应用程序,将 app2 流量重定向到 8443。
问题:
- 我可以在保留 URL 的同时避免主机上额外的 nginx 反向代理吗?
- 另外,ssl 怎么样?我可以在主机上设置 https 并将其路由到客户机上的端口 80,从而避免拥有两个证书吗?注意:我在 Virtualbox 中使用 NAT,所以我想应该不会有任何安全问题。
答案1
这由 Nginx 覆盖文档或任何 Nginx教程. Nginx 将绑定到任何所需的端口,使用 SNI 它将使用不同的域将请求发送到不同的服务器块/上游应用程序代理密码(例子)。只需在 Nginx 中为每个域定义一个服务器块即可。
如果你想要 SSL,请尝试我的Let's Encrypt 教程,但应用程序必须是公开可访问的。为此。
回答您的问题。
- 单个 Nginx 实例就足够了。它可以在任何端口上侦听域特定请求,并将请求传递到任何端口。
- 是的。
下面是示例配置。
server {
server_name app1.com;
listen 80; // add other listeners required
location {
// Insert proxy_pass and related statements
}
}
server {
server_name app2.com;
listen 80; // add other listeners required
location {
// Insert proxy_pass and related statements
}
}
// Example of forwarding
server {
server_name www.app1.com;
listen 80;
return 301 https://app1.com$request_uri;
}
// Example of SSL
server {
listen 443 ssl;
server_name app1.com;
ssl_certificate /var/lib/acme/certs/***CERT_DIRECTORY/fullchain;
ssl_certificate_key /var/lib/acme/certs/***CERT_DIRECTORY/privkey;
// Insert a location here and remove the 301 to server on SSL
return 301 https://www.example.com$request_uri;
}