# Angie 与 nginx 的异同点

*25.08.2023*

Angie 项目和 Angie PRO 产品与其前身 nginx 及其商业版本 NGINX Plus 的关系。

![Angie vs. nginx](../../_images/news/shodstva-i-razlichiya-angie-i-nginx.png)![Angie vs. nginx](../../_images/news/shodstva-i-razlichiya-angie-i-nginx.png)

## **引言**

今天我们将讨论一个让所有了解我们项目的人都感兴趣的话题——Angie 项目和 Angie PRO 产品与其前身 nginx 及其商业版本 NGINX Plus 的关系。通过阅读俄语互联网上的相关讨论，我们发现这些问题仍在被积极讨论；我们将试图阐明所有引起特别关注的问题。

简而言之：不，我们不只是换了个标签。

## Angie 与 nginx 的关系

从一开始，Angie 就被定位为 nginx 的一个分支。这个概念（不要与"branch"——代码分支混淆）可能是开源软件的基石之一。另一方面，它经常伴随着误解和错误解释。

当一个新项目基于开源项目开始，完全或部分借用其前身的代码时，就会产生分支。借用本身不应引起质疑：这正是创作者最初开放代码的原因。正如经典所说："百花齐放，百家争鸣。"

新项目通常与其前身没有直接关系：它由不同的人开发，他们对未来有自己的愿景。自然地，分支经常由离开团队的项目前参与者创建。另一种典型情况是商业公司参与开源项目的开发：比如 MariaDB。

同时，分支并非静态副本——如果前身的代码在不断发展，改进和补充会定期整合到新项目中。这正是 Angie 的情况：每次新版本发布时，我们都会"引入"开源版本 nginx 中发生的变化（通常是重大变化）。

最后，我们要指出，Angie 不包含任何来自 NGINX Plus（nginx 的闭源商业版本）的代码；此外，我们的付费 Web 服务器 [Angie PRO](https://cn.angie.software/angie/docs/) 也不打算成为 NGINX Plus 的百分百功能复制品。如另一位经典所说："我们将走一条不同的道路。"

## Angie 如何替代 nginx

Angie 可以完全替代开源版本的 nginx，提供与其前身相应版本相同的功能（关于我们自己的功能将在下文详述）。

同时，除了熟悉的操作系统和计算架构外，Angie 还有意识地针对一些"官方" nginx 短期内不会支持的平台：包括俄罗斯认证的操作系统，如 ALT Linux、Astra Linux SE 和 RED OS，以及"Baikal"和"Elbrus"处理器。

另一个区别在于我们对第三方模块的处理方式。nginx 受欢迎的原因之一是其可扩展的架构——任何人都可以编写实现新功能的模块并自由公开发布。

随着时间推移，互联网上形成了一个完整的第三方模块生态系统；但是，用户必须自己组装这些模块。我们决定简化他们的工作，在我们的仓库中维护一个统一的 [现成软件包集合](https://cn.angie.software/angie/docs/installation/oss_packages/#install-dynamicmodules-oss/)，利用我们的经验和知识。

## Angie 如何改进 nginx

按照软件行业的标准，nginx 项目创建已有相当长的时间。在此期间，用户积累了许多需求，我们努力在开发 Angie 时考虑这些需求，以适应现代动态 IT 基础设施的需要；简单来说，我们重视速度、配置便利性和监控便利性。此外，我们致力于支持当前和与我们相关的标准。

## 标准和认证

我们适应我们运营的环境。在项目存在期间，我们已经：

- 将开发本地化到俄罗斯，并进入了俄罗斯电子计算机和数据库软件统一注册表；
- 启动了支持符合 GOST 标准加密的积极工作；
- 实现了对中国使用的多个加密标准的支持（[Tongsuo](https://github.com/Tongsuo-Project/Tongsuo/) 库的作者甚至 [推荐使用我们的产品](https://github.com/Tongsuo-Project/Tongsuo#典型应用/)）。

## 速度

我们工作中关注的另一个因素是通过消除不必要的延迟来加速 Web 服务器本身，以及快速适应不断变化的工作条件。我们：

- 添加了动态配置 API 和自适应 DNS 寻址工具，这有助于绕过前身的结构限制，并在不过度使用资源的情况下更快地更改设置；
- 实现了用户会话与代理服务器绑定的机制，扩展了 Angie 在不同使用场景下的适用性并节省资源；
- 引入了代理服务器的主动健康检查，降低了向不工作的服务器发送实际请求的可能性；这减少了请求处理的延迟，提高了最终用户的服务质量；
- 创建了代理缓存分段的功能，从而更有效地利用所有服务器资源。

## 可配置性

我们致力于改进的另一个领域是 Web 服务器配置的灵活性和便利性。我们已经：

- 添加了上述用于代理服务器组的动态配置 API，简化了 Angie 与现代 IT 基础设施的集成，以及允许动态适应 DNS 寻址变化的设置；
- 提供了一些其他小但有用的配置选项。

## 可观察性

最后，对我们来说，Angie 开发的一个重要方面是监控 Web 服务器本身和代理服务器的状态。我们已经：

- 在 API 中实现了检索 Web 服务器基本信息的功能，以及以流行的现代格式提供其运行的所有关键方面的统计数据；
- 引入了上述代理服务器的主动健康检查，可自主监控其运行状态；
- 添加了一系列设置，用于收集数据传输会话和地址解析请求的统计信息。

## 结论

我们简要概述了 Angie 的特性，并列出了进一步项目开发的主要优先事项；我们将在另外的文章中详细介绍我们的未来计划以及我们的 Ingress Controller 版本。我们希望现在 Angie 和 nginx 之间的异同点不会引起太多疑问。感谢您一直支持我们！
