Nginx 多个实例



我有一个装有 AWS 的 EC2 实例,我已经安装了 nginx 并创建了多个服务器块来为多个应用程序提供服务。

但是,如果nginx出现故障,则所有应用程序也会出现故障。

有没有办法为每个应用程序设置单独的nginx实例?因此,如果一个nginx实例出现故障,它不会影响其他实例。

是的,在同一台服务器上安装 2 个 nginx 实例在技术上是可能的,但我会以另一种方式进行。

1 - 您可以只创建多个 EC2 实例。这种方法的缺点是,根据您想要的实例数量,可能会变得更难维护。

2 - 您可以使用Docker或其任何替代方案来创建容器并解决此问题。您可以创建所需数量的容器和完全独立的nginx实例。尽管 docker 易于学习并立即开始使用它,但这种方法的缺点是您需要付出一点努力来学习它,并且您的主 EC2 实例需要有足够的资源在容器之间共享。

我希望它有所帮助!

如果可以使用ELB而不是nginx。 这会更方便,但如果 ELB 不适合您。 nginx已经支持高可用性模式,以避免您提到的单点故障问题它在这里正式记录https://www.nginx.com/products/nginx/high-availability/这比为每个应用程序配备一台 NGINX 机器并授予更多可用性要好

您正在寻找的冗余类型通常由负载均衡器或反向代理提供。有很多方法可以在架构上实现,但一般来说看起来像这样;

使用相同的服务器定义和像haproxy这样的平衡器运行多个nginx实例。这允许平衡器检查哪些 nginx 实例处于联机状态,并依次向每个实例发送请求。然后,如果实例出现故障,或者业务流程协调程序启动一个新实例,则请求只会发送到联机实例。

如果需要更频繁地分发请求,则可以为每个服务器使用nginx实例,并针对每个实例或节点使用反向代理。

如果你这样做,nginx可能会有一些开销,你的nginx以后可能很难维护,因为有很多nginx实例。 例如。如果您需要更新或添加一些模块,那将更加困难。

如果您尝试使用 EC2 自动扩展组,即使至少 1 个和所需的 1 个,该怎么办?这样,如果当前实例出现故障,它将自动启动一个新实例。

如果您需要保留某些设置(例如 EC2 的弹性 ip(,可以尝试搜索 EC2 实例恢复。它将还原设置,这与自动缩放组不同。

但是,如果您使用像 ALB 这样的负载均衡器并至少使用 2 个实例,那就更好了。使用 ALB 也会让您更安全。您可能还想阅读有关 ALB 目标群体的信息。它将为您提供有关如何解决当前问题的更多选择。

只要你可以为你的nginx实例使用不同的端口,请查看这篇文章:https://serverfault.com/questions/1138876/how-can-you-run-two-instances-of-nginx-on-the-same-machine-without-docker

最新更新