<p>假设你计划在你的新VPS上托管几个网站。让我们看看每个站点可能需要的工具。</p>
<h2>HTTP服务器</h2>
<p>网站“Alpha”只是由一些纯HTML、CSS和Javascript组成。内容是静态的。</p>
<p>当有人访问Alpha网站时,他们的浏览器将发出一个HTTP请求。您已配置(通过DNS和名称服务器配置)请求定向到VPS的IP地址。现在您需要您的VPS能够接受该HTTP请求,决定如何处理它,并发出访问者浏览器可以理解的响应。您需要一个HTTP服务器,比如Apache httpd</strong>或NGINX</strong>,假设您做了一些研究,最终决定使用NGINX。</p>
<h2>应用服务器</h2>
<p>网站“Beta”是动态的,使用<strong>Django</strong>Web框架编写。</p>
<p>描述Python应用程序(django应用程序)和应用服务器之间接口的<a href="http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface" rel="noreferrer">WSGI is an protocol</a>。因此,您现在需要的是一个WSGI应用服务器,它将能够理解web请求,对应用程序的各种对象进行适当的“调用”,并返回结果。这里有很多选项,包括gunicorn和uWSGI。假设你做了一些研究,最终决定了uWSGI。</p>
<p>uWSGI也可以接受和处理静态内容的HTTPS请求,所以如果你想的话,你可以让NGINX完全提供网站Alpha,uWSGI完全提供网站Beta。就是这样。</p>
<h2>反向代理服务器</h2>
<p>但是uWSGI在处理静态内容方面的性能很差,所以您宁愿使用NGINX来处理静态内容,比如图像,甚至在网站Beta上也是如此。但接下来就必须区分请求并将它们发送到正确的位置。有可能吗?</p>
<p>NGINX不仅是一个HTTP服务器,而且还是一个<a href="http://en.wikipedia.org/wiki/Reverse_proxy" rel="noreferrer">reverse proxy</a>服务器:它能够将传入的请求重定向到另一个地方,比如uWSGI应用服务器,或者许多其他地方,收集响应并将它们发送回原始请求者。令人惊叹的!因此,您可以将所有传入的请求配置为转到NGINX,NGINX将提供静态内容,或者在需要时将其重定向到app服务器。</p>
<h2>多台web服务器的负载平衡</h2>
<p>你还主持了Gamma网站,这是一个在国际上很受欢迎的博客,收到了大量的流量。</p>
<p>对于Gamma,您决定设置多个web服务器。所有传入的请求都将通过NGINX发送到原始VPS,然后配置NGINX以循环方式将请求重定向到其他几个web服务器之一,并将响应返回给原始请求者。</p>
<p><strong>HAProxy</strong>是一个专门为高流量站点平衡负载的web服务器。在本例中,您可以使用NGINX处理站点Gamma的流量。在其他场景中,可以选择设置高可用性集群:例如,将所有请求发送到像HAProxy这样的服务器,该服务器智能地将流量重定向到与原始VPS类似的nginx服务器集群。</p>
<h2>缓存服务器</h2>
<p>由于流量太大,网站Gamma超出了VPS的容量。假设您托管的是网站Delta,而您的web服务器无法处理Delta的原因是因为一个流行的功能非常重的内容。</p>
<p>缓存服务器能够理解哪些媒体内容被频繁请求,并以不同的方式存储这些内容,以便能够更快地为其提供服务。这是通过减少磁盘IO操作来实现的;流行的内容可以存储在内存或虚拟内存中。您可能决定将现有的NGINX堆栈与<strong>Varnish</strong>或<strong>Memchached</strong>等技术结合起来,以更有效地实现这种优化和服务器网站Gamma。</p>