对于许多公司而言,Nginx + Apache + PHP是非常典型且广泛使用的捆绑软件,Timeweb也不例外。但是,弄清楚它是如何实现的可能会很有趣并且很有意义。
当然,这种捆绑包的使用取决于我们客户的需求。 Nginx和Apache都扮演着特殊的角色,分别解决特定的问题。Apache
的主要设置是在Apache本身的配置文件中完成的,而客户端站点的设置是通过.htaccess文件完成的... .htaccess是一个配置文件,客户端可以在其中独立自定义Web服务器的规则和行为。此设置将特定于他的站点。例如,得益于Apache的功能,用户可以将同一PHP版本中的操作模式从mod_php更改为mod_cgi。您可以自定义重定向,SEO优化,方便的URL和一些PHP限制。
Nginx用作将流量重定向到Apache的代理服务器,并用作提供静态内容的Web服务器。同样对于Nginx,我们已经开发了安全模块,这些模块允许我们保护用户的数据,例如,分离访问权限。
假设有一些用户访问了我们客户的网站。首先,用户转到Nginx,后者提供静态内容。它立即发生。然后,在加载PHP时,Nginx将请求重定向到Apache。Apache与PHP一起已经生成了动态内容。
Timeweb中Apache和Nginx捆绑包的功能
我们的虚拟主机为Apache&Nginx实现了2种主要方案:Shared和Dedicated。
共享
方案此方案适用于大多数用户。它以其简单性和资源强度而著称:共享方案使用较少的资源,因此其资费也更便宜。根据此方案,一个Nginx在服务器上运行,该服务器允许服务所有用户请求和几个Apache实例。
共享方案已改进了很长时间:我们逐渐修复了缺点。方便地,无需修改源代码即可完成此操作。
共享
架构专用架构
专用需要更多资源,因此其关税对客户而言更昂贵。在专用模式中,为每个客户端引发一个单独的Apache。这里的资源是为客户端保留的,它们是专门分配的。工作原理:服务器上有多个PHP版本。我们支持5.3、5.4、5.6、7.1、7.2、7.3、7.4版本。因此,对于每个PHP版本,都将启动其自己的Apache。
专用方案
安全区。在Nginx中配置区域
以前,我们为Nginx使用了许多共享内存区域(区域)-每个域一个服务器块。此配置需要大量资源,因为会为每个站点创建一个单独的区域。但是,在Nginx设置中,大多数站点属于同一类型,因此由于可以在ngx_http_map_module中使用map指令,因此可以将它们放置在一个区域中,从而可以设置映射。例如,我们有一个区域模板,必须向其提供变量:网站路径,PHP版本,用户。因此,重新读取Nginx配置(即重新加载)已经加快了速度。
这种配置大大节省了RAM资源,并使Nginx更快地工作。
重新加载将不起作用!
在共享方案中,我们无需在更改站点设置时重新加载(重新加载)Apache。以前,当一个客户端想要添加域或更改PHP版本时,需要强制性重新加载Apache,这会导致响应延迟并负面影响站点性能。
通过创建动态配置,我们摆脱了重载。多亏了mpm-itk(一个Apache模块),每个进程都由一个单独的用户运行,从而提高了安全性。该方法允许您将有关用户及其document_root的数据从Nginx传输到Apache2。因此,Apache不包含站点配置,它动态地接收它们,并且不再需要重新加载。
共享架构配置
Docker呢?
许多公司已经转向基于容器的系统。 Timeweb当前正在考虑这种过渡的可能性。当然,每种解决方案都有其优缺点。
伴随着不可否认的优势,容器系统为用户提供了更少的资源。在Timeweb中,由于上述托管操作方案,用户没有内存限制。它接收的资源比容器更多。此外,用户可以加载更多的Apache模块。
Timeweb为大约500,000个网站提供动力。我们承担着巨大的责任,不要对复杂的体系结构立即做出不必要的更改。 Apache&Nginx捆绑包可靠且经过时间检验。反过来,我们努力通过独特的配置来实现最佳性能。
为了大量站点的高质量和快速工作,您需要使用Apache和Nginx的模板和动态配置。它使您可以轻松快速地管理大量类似的服务器。