多个 Web 应用程序 - 同一 VM 与多个 VM

多个 Web 应用程序 - 同一 VM 与多个 VM

首先,我更像是一名开发人员,而不是管理员。我问了同样的问题这里。但是,如果有更好的地方可以提出这个问题,请告诉我。

这是我的情况。我有一个专为在 Linux 上运行而构建的应用程序。它同时提供 https(使用 nginx 在端口 443 上)和 ssh(在端口 22 上)。但由于组织限制,我被迫在 Windows 主机上运行它,并使用虚拟盒运行 Linux 客户机。此外,主机盒上还有另一个 Web 应用程序;这两个 Web 应用程序都应基于 URL 提供服务(例如:app1.com、app2.com)。需要保留 URL。所有 ssh 流量都可以默认为客户机。

以下是我实现此目标的一个想法,我想知道我是否让这件事变得比它应该的更复杂。任何帮助都值得感激。

脚步:

  1. 在我的主机上使用未使用的 https 端口(例如 8443)并将所有流量重定向到客户机。在 Virtualbox 中使用基于 NAT 的端口转发(8443 -> 443,22 -> 22)。
  2. 剩下的唯一一件事就是在主机上设置另一个 nginx 作为反向代理。在 Windows 上设置虚拟主机 (/etc/hosts),并拥有两个 IP 和 URL 条目 (app1.com 和 app2.com)。在主机上使用单独的 nginx 作为反向代理,将 app1 流量重定向到主机上的 Web 应用程序,将 app2 流量重定向到 8443。

问题:

  1. 我可以在保留 URL 的同时避免主机上额外的 nginx 反向代理吗?
  2. 另外,ssl 怎么样?我可以在主机上设置 https 并将其路由到客户机上的端口 80,从而避免拥有两个证书吗?注意:我在 Virtualbox 中使用 NAT,所以我想应该不会有任何安全问题。

答案1

这由 Nginx 覆盖文档或任何 Nginx教程. Nginx 将绑定到任何所需的端口,使用 SNI 它将使用不同的域将请求发送到不同的服务器块/上游应用程序代理密码例子)。只需在 Nginx 中为每个域定义一个服务器块即可。

如果你想要 SSL,请尝试我的Let's Encrypt 教程,但应用程序必须是公开可访问的。为此。

回答您的问题。

  1. 单个 Nginx 实例就足够了。它可以在任何端口上侦听域特定请求,并将请求传递到任何端口。
  2. 是的。

下面是示例配置。

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;
}

相关内容