所以我最近一直在学习更多关于 Nginx 的知识。我以前用它在同一系统上提供一个网络应用程序,但想单独扩展。我已经能够使用 2 个运行我的 Flask 应用程序的 Gunicorn 服务器设置一个 Nginx 负载平衡器。我的问题是如何将其设置为使用来自每个 Gunicorn 服务器的 Nginx 静态服务能力。
假设我有 3 个要付费的虚拟专用服务器。 1 号将 Nginx 作为负载均衡器/反向代理路由请求到 2 号和 3 号,它们是重复的 Web 应用程序。我希望这些独立于运行应用程序所需的一切,包括它们的静态目录。因此,负载均衡器/反向代理上没有静态目录,而是全部包含在 Web 应用程序目录结构中。
目前看起来是这样的:
Gunicorn -> Flask
/
Nginx loadbalancer/reverseproxy
\
Gunicorn -> Flask
是否需要在每台 Gunicorn 服务器上安装 Nginx 以访问静态目录并将静态文件返回到 Nginx 负载均衡器/反向代理?所以如下:
Nginx -> Gunicorn -> Flask
/
Nginx loadbalancer/reverseproxy
\
Nginx -> Gunicorn -> Flask
也许我做的全错了,上面的做法有点矫枉过正,可能不会提高性能。如果是这样的话,什么是一种好的结构,可以在一个主要入口点上进行负载平衡和缓存,并路由到 Gunicorn 并能够提供静态文件,这样 Gunicorn 就不必这样做了?
我真正想要的是能够拥有一台安装了 Web 应用程序所有内容的服务器,这样我就可以根据需要轻松添加更多内容,并将负载均衡器指向这些上游服务器。
任何建议都是有帮助的。
最佳答案
假设这将投入生产,并且就我对 gunicorn 的理解而言,你不应该使用 unicorn 本身来提供静态文件,
最终,整个系统前端的 nginx 将充当负载平衡器/rev 代理,您可以将该服务器配置为仅将传入请求分发到一组上游服务器,
现在,关于上游服务器,就像这样
Nginx -> Gunicorn -> Flask
它的配置将使某些请求从静态文件目录得到服务,而其他请求直接进入 gunicorn 服务器,
在一天结束时,您会将离散的上游服务器部署到池中并将它们添加到 rev 代理 conf,所以它看起来像这样(就像您提到的那样)
Nginx -> Gunicorn -> Flask
/
Nginx loadbalancer/reverseproxy
\
Nginx -> Gunicorn -> Flask
请注意,每台服务器都可以单独部署,并具有单独为整个站点提供服务器的能力,
这个答案来自这样一个事实,即如果不通过服务器本身,您就无法真正提供来自其他后端主机的静态文件,并且由于 nginx 实际上是该任务中最好的东西之一,因此使用它是有意义的。
关于linux - Nginx 负载均衡器为来自多个 WSGI 服务器的静态文件提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696860/