阿帕奇和 Nginx。 由一根链条相连

Apache 和 Nginx 组合在 Timeweb 中是如何实现的

对于很多公司来说,Nginx + Apache + PHP 是非常典型和常见的组合,Timeweb 也不例外。 然而,准确理解它是如何实现的可能是有趣且有用的。

阿帕奇和 Nginx。 由一根链条相连

当然,这种组合的使用取决于客户的需求。 Nginx 和 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 个主要运行方案: 共享和专用.

共享方案

该方案适用于大多数用户。 它的特点是简单性和资源密集度:共享方案使用更少的资源,这就是其资费更便宜的原因。 根据这一方案,服务器运行一个 Nginx(可以为所有用户请求提供服务)和多个 Apache 实例。

共享方案长期以来一直在改进:我们逐渐纠正了缺点。 方便的是,无需修改源代码即可完成。

阿帕奇和 Nginx。 由一根链条相连
共享方案

专用方案

Dedicated需要更多资源,因此其资费对于客户来说更贵。 在专用方案中,每个客户端都有自己独立的 Apache。 这里的资源是为客户端保留的,它们是专门分配的。 工作原理:服务器上有多个版本的 PHP。 我们支持版本 5.3、5.4、5.6、7.1、7.2、7.3、7.4。 因此,每个版本的 PHP 都会启动其自己的 Apache。

阿帕奇和 Nginx。 由一根链条相连
专用方案

安全区。 在 Nginx 中设置区域

以前,对于 Nginx,我们使用了许多共享内存区域(区域)——每个域一个服务器块。 此设置需要大量资源,因为为每个站点创建了单独的区域。 然而,在Nginx设置中,大多数站点都是同一类型,因此由于在模块中使用了map指令,它们可以被放置在一个区域中 ngx_http_map_模块,它允许您指定对应关系。 例如,我们有一个区域模板,必须在其中提供变量:站点路径、PHP 版本、用户。 这样就加速了Nginx配置的重新读取,即重新加载。

这种配置极大地节省了RAM资源并加快了Nginx的速度。

重新加载就不行了!

在共享方案中,我们无需在更改网站设置时重新加载 Apache。 以前,当客户想要添加域名或更改 PHP 版本时,需要强制重新加载 Apache,这会导致响应延迟并对站点性能产生负面影响。

我们通过创建动态配置摆脱了重新加载。 谢谢 mpm-itk (Apache 模块),每个进程都作为单独的用户运行,这提高了安全级别。 此方法允许您将有关用户及其 document_root 的数据从 Nginx 传输到 Apache2。 因此,Apache 不包含站点配置,它动态接收它们,并且不再需要重新加载。

阿帕奇和 Nginx。 由一根链条相连
共享架构配置

那么 Docker 呢?

许多公司已经转向基于容器的系统。 Timeweb 目前正在考虑这种转变的可能性。 当然,每个决定都有利有弊。

除了不可否认的优势之外,容器系统还为用户提供了更少的资源。 在Timeweb中,由于所描述的托管方案,用户在RAM上没有限制。 它接收的资源比容器中的资源多。 此外,用户可能加载了更多的Apache模块。

Timeweb 为大约 500 个网站提供支持。 我们承担重大责任,不会对复杂的架构进行即时、不合理的更改。 Apache 和 Nginx 组合可靠且经过时间考验。 反过来,我们尝试通过独特的配置实现最大性能。

为了高质量、快速地运行大量站点,需要使用Apache和Nginx的模板和动态配置。 它允许您轻松快速地管理大量类似的服务器。

来源: habr.com

添加评论