【问题标题】:Can part of a website live on a different server?网站的一部分可以存在于不同的服务器上吗?
【发布时间】:2019-09-23 23:51:58
【问题描述】:

假设我有一个网站www.myapp.com, 我可以将所有流量重定向到myapp.com/api/ 到不同的服务器吗 以及到myapp.com/blog/ 的所有流量都在另一个上?

我不想更改 URL。 我知道这种东西与负载平衡有关,但我不关心负载平衡。 我已经建立了一个网站,并将API 作为单独的服务,我希望它们生活在相同的域名下,但路径不同。这可能吗?

这可能听起来很愚蠢,但我找不到任何资源:( 应用程序的一部分也是 Docker 化的,并且存在于不同的服务器上。

【问题讨论】:

  • 当然你可以用 nginx 和 proxy_pass 指令来做到这一点。这个post 可能会帮助您入门。

标签: apache docker nginx reverse-proxy traefik


【解决方案1】:

是的,这是可能的。您可以使用 Web 服务器的反向代理以及 Docker's service discovery 来实现此目的。

当您将多个 docker 容器连接到同一个网络时,Docker 的服务发现基本上可以工作,这样您就可以使用容器的主机名访问容器。这里的问题是这些容器必须连接到同一个网络。

由于您提到应用程序的一部分是 Docker 化的并且独立存在,因此可以使用不同的解决方案。

让我们假设:

  1. Nginx 是 Web 服务器,它在 server1 上运行。
  2. Dockerized App 在 server2 中。
  3. Server1 和 server2 可以相互通信。
  4. 你知道 Docker,Docker Swarm。

使用 Docker Swarm 和服务发现:*推荐*

创建一个docker swarm cluster 并连接两个服务器。然后创建一个overlay network。完成后在同一网络中的 server1 中运行 Nginx,并在同一网络中的 server2 中运行 dockerized 应用程序。 Now you can use Nginx's proxy_pass to connect to server2's docker app.

使用 Docker 和端口映射:

在 server2 和 map the ports by using docker port binding 中运行 Dockerized 应用程序。在 server1 中使用反向代理连接到 server2 的映射端口。

注意:

在这两种情况下,请确保

  1. server1 和 server2 都可以相互通信。
  2. 在防火墙中根据相应的端口打开相应的端口 文档。
  3. 您还可以使用其他 Web 服务器,例如 apache,并且可以按照相同的步骤操作。

限制:(仅适用于 Nginx 反向代理)

每当重新启动 dockerized 应用程序时,Nginx 的缓存都不会刷新,因为它会出现 502 Bad Gateway 错误。为了处理它,您可能需要让 Nginx 在特定时间间隔内刷新一次缓存。 Refer to this answer of mine to know more details on how to do it.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2010-12-23
    • 1970-01-01
    • 2016-12-22
    • 2013-10-16
    相关资源
    最近更新 更多