我在AWS上拥有一个EC2实例,并且已经安装了nginx并创建了多个服务器块来为多个应用程序提供服务器。
但是,如果nginx发生故障,那么所有应用程序也会发生故障。
是否可以为每个应用程序设置单独的Nginx实例?因此,如果一个nginx实例发生故障,则不会影响其他实例。
答案 0 :(得分:1)
是的,在技术上可以在同一台服务器上安装2个Nginx实例,但是我会用另一种方式来实现。
1-您可以只创建多个EC2实例。这种方法的缺点是,根据所需的实例数,可能难以维护。
2-您可以使用Docker或其任何替代方法来创建容器并解决此问题。您可以创建所需数量的容器以及完全独立的nginx实例。尽管Docker简单易学,并且可以立即开始使用,但是这种方法的缺点是您需要花一点精力来学习它,并且您的主要EC2实例需要具有足够的资源以在容器之间共享。
希望对您有帮助!
答案 1 :(得分:1)
如果可以使用 ELB 代替nginx。这样会更方便,但是如果ELB不适用于您。 nginx已经支持高可用性模式,以避免您提到的单点故障问题 这是正式记录在这里 https://www.nginx.com/products/nginx/high-availability/ 胜过为每个应用程序配备一台nginx机器,并为被授予者提供更多可用性
答案 2 :(得分:0)
实际上,您要寻找的冗余类型通常由负载平衡器或反向代理提供。从架构上可以实现很多方法,但是总的来说看起来是这样。
使用相同的服务器定义和平衡器(如haproxy)运行多个nginx实例。这使平衡器可以检查哪些nginx实例在线,并依次向每个实例发送请求。然后,如果某个实例发生故障,或者协调器启动了一个新实例,则请求只会发送到在线请求。
如果需要更大量地分配请求,则可以为每个服务器使用nginx实例,并针对每个实例或节点使用反向代理。
答案 3 :(得分:0)
如果这样做的话,nginx可能会有一些开销,并且由于许多nginx实例,nginx以后可能很难维护。例如如果您需要更新或添加一些模块,将会更加困难。
如果您尝试使用EC2自动缩放组,即使最小数量为1,而期望数量为1,该怎么办?这样,如果当前实例发生故障,它将自动启动一个新实例。
如果需要保留某些设置,例如EC2的Elastic ip,则可以尝试搜索EC2实例恢复。与自动缩放组不同,它将恢复您的设置。
但是,如果您要使用ALB之类的负载均衡器并至少使用2个实例,那会更好。使用ALB还可以使您更安全。您可能还想阅读有关ALB目标人群的信息。它将为您提供更多有关如何解决当前问题的选择。