假设您计划在新的VPS上托管几个网站。让我们看看每个站点可能需要的工具。
HTTP服务器
网站“Alpha”只包含一些纯HTML、CSS和Javascript。内容是静态的。
当有人访问网站Alpha时,他们的浏览器将发出一个HTTP请求。您已经配置(通过DNS和名称服务器配置)该请求被定向到您的VPS的IP地址。现在,您需要您的VPS能够接受该HTTP请求,决定如何处理它,并发出一个访问者的浏览器可以理解的响应。您需要一个HTTP服务器,例如Apache httpd或NGINX,假设您进行了一些研究并最终决定使用NGINX。
应用服务器
网站“Beta”是动态的,使用Django Web框架编写。
WSGI是一种协议,用于描述Python应用程序(即Django应用程序)与应用服务器之间的接口。所以现在你需要一个WSGI应用服务器,它将能够理解Web请求,适当地“调用”应用程序的各种对象并返回结果。在这里,你有许多选择,包括gunicorn和uWSGI。假设你进行了一些研究,并最终决定使用uWSGI。
uWSGI可以接受和处理静态内容的HTTPS请求,因此如果您愿意,您可以让Alpha网站完全由NGINX提供服务,让Beta网站完全由uWSGI提供服务。就这样。
反向代理服务器
但是uWSGI在处理静态内容方面性能较差,因此你更愿意将像图片这样的静态内容交给NGINX处理,即使是在Beta网站上也是如此。但接着就需要有某种方式来区分请求并将其发送到正确的位置。这是可能的吗?
原来NGINX不仅是HTTP服务器,还是
反向代理服务器:它能够将传入的请求重定向到另一个位置,例如您的uWSGI应用程序服务器或其他位置,并收集响应并将其发送回原始请求者。太棒了!因此,您可以配置所有传入的请求都经由NGINX处理,它将提供静态内容或在需要时将其重定向到应用程序服务器。
使用多个Web服务器进行负载均衡
您还托管着国际上广受欢迎且接收大量流量的博客网站Gamma。
对于Gamma,您决定设置多个Web服务器。所有传入的请求都将经过原始VPS与NGINX处理,并配置NGINX以循环方式基于轮询将请求重定向到几个其他Web服务器之一,并返回响应给原始请求者。
HAProxy是一种专门为高流量网站平衡负载的Web服务器。在这种情况下,您可以使用NGINX处理Gamma网站的流量。在其他场景中,人们可能会选择设置一个高可用性集群:例如,将所有请求发送到像HAProxy这样的服务器,该服务器智能地将流量重定向到类似于原始VPS的一组nginx服务器。
缓存服务器
由于流量过大,网站Gamma超出了您的VPS容量。假设您改为托管Delta网站,并且您的Web服务器无法处理Delta是因为某个受欢迎的功能非常内容繁重。
缓存服务器能够理解哪些媒体内容经常被请求,并以不同的方式存储这些内容,以便更快地提供服务。这通过减少磁盘IO操作来实现;流行的内容可以存储在内存或虚拟内存中。您可能决定将现有的NGINX堆栈与像Varnish或Memchached这样的技术相结合,以实现此类优化并更有效地为网站Gamma提供服务。