泊坞窗内有多少个代理(nginx)层被认为过多?

时间:2018-12-26 17:49:22

标签: docker nginx

我已经为1台机器设置了。当前看起来像这样:

  • 证书-letecrypt证书
  • static#-React应用程序的静态文件
  • 应用-api后端

出于某些原因,我不喜欢此设置:

  • 证书由certbot控制,为了续订它们,我需要停止我的应用,在主机上启动nginx并进行更新。
  • 所有react应用都位于一个nginx容器中,但它们在逻辑上是分开的,应该位于单独的容器中。还可以考虑构建时间,但是在多阶段构建中,每个阶段都可以很好地缓存,因此很好。
  • 应用程序路由逻辑与React应用程序结合

这就是为什么我想出另一种设计的原因:

主机上有一个nginx实例,它由certbot控制,并将所有流量重定向到docker容器。

每个react应用都位于单独的容器中,该容器具有用于服务静态文件的自己的nginx。

唯一公开的容器是“ nginx路由器”,它控制流量的分配方式。

我真的很喜欢这个设置,它很好并且模块化,但是可能会有两个问题:

  • 潜在的性能问题,因为nginx的东西太多了。
  • 使用docker时,除了docker之外,在主机上运行某些内容可能是一种不好的做法。

1 个答案:

答案 0 :(得分:1)

如您所见,容器在传统上应该是单进程的。还应避免混合主机/容器上下文,这实际上不是可维护/可扩展的解决方案。容器应尽可能无状态。

对于生产而言,您可能希望顶层(路由)是一些托管的负载平衡服务,该服务将为您处理SSL终止,可无限扩展且足够便宜(考虑到设置简便且无需维护)。在您的情况下,除非需要非常非常具体的功能,而您需要对某个部分进行完全手动控制,否则设置和维护会很痛苦。

如果可以的话,静态资产也应该托管在CDN的后面(如果您喜欢AWS,则可以使用S3 + CloudFront,但其他任何方法都可以使用)。

对于本地发展而言,谁在乎:-)绩效将不会很快成为问题。

此外,如果您真的想走这条路,那么您可能想要检查haproxy,如果您要做的只是基本路由,那么它比nginx轻巧得多。