<!-- review: finished -->

<a id="sourcebuild"></a>

# 从源代码构建 Angie

我们建议从官方预构建的 [软件包](https://cn.angie.software//angie/docs/installation/oss_packages.md#oss-packages) 安装 Angie。
但是,如果您仍然需要自己构建:

1. 从 [我们的网站](https://download.angie.software/files/) 下载 `.tar.gz` 归档文件:
   ```console
   $ curl -O https://download.angie.software/files/angie-|version|.tar.gz
   ```
2. 解压归档文件并导航到源代码目录:
   ```console
   $ tar -xpf angie-|version|.tar.gz
   $ cd angie-|version|
   ```
3. 要准备构建,请使用 **./configure** 脚本,
   该脚本确定构建所在操作系统的特定特征,
   特别是 Angie 可以用来处理连接的方法。
   成功运行后,该脚本会创建一个 `Makefile`。

   在运行 **./configure** 之前,请查看并设置所需的
   [构建选项](#configure):
   ```console
   $ ./configure <OPTIONS>
   ```
4. 当 `Makefile` 准备就绪后,构建并安装 Angie:
   ```console
   $ make
   $ make install
   ```

<a id="configure"></a>

## 构建选项

<a id="general"></a>

### 常规

| 选项                     | 描述                                                                                                                                                     | 默认值                            |
|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------|
| `--help`               | 打印帮助信息。                                                                                                                                                |                                |
| `--user=`name          | 设置非特权用户的名称,工作进程将使用其凭据。安装后,可以随时在<br/>`angie.conf` 配置文件中使用 [user](https://cn.angie.software//angie/docs/configuration/modules/core.md#user)<br/>指令更改该名称。 | `nobody`                       |
| `--group=`name         | 设置组的名称,工作进程将使用其凭据。安装后,可以随时在<br/>`angie.conf` 配置文件中使用 [user](https://cn.angie.software//angie/docs/configuration/modules/core.md#user)<br/>指令更改该名称。     | `--user` 设置                    |
| `--build=`name         | 为构建设置一个可选名称。                                                                                                                                           |                                |
| `--builddir=`path      | 设置构建目录。                                                                                                                                                | `objs`                         |
| `--feature-cache=`path | 指定用于缓存构建工件的目录。                                                                                                                                         | 如果设置时未指定路径,则使用 `--builddir` 设置 |

<a id="paths"></a>

### 路径

| 选项                                  | 描述                                                                                                                                                                                                                                            | 默认值                         |
|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| `--prefix=`path                     | 定义将存储服务器文件的目录。此目录也将用于<br/>**./configure** 设置的所有相对路径(库源代码路径除外)<br/>以及 `angie.conf` 配置文件中的路径。                                                                                                                                                   | `/usr/local/angie`          |
| `--sbin-path=`path                  | 设置 Angie 可执行文件的名称。此名称仅在安装期间使用。                                                                                                                                                                                                                | `<prefix>/sbin/angie`       |
| `--modules-path=`path               | 定义将安装动态模块的目录。                                                                                                                                                                                                                                 | `<prefix>/modules`          |
| `--conf-path=`path                  | 设置 `angie.conf` [配置文件](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile) 的名称。<br/>如果需要,您可以随时使用 `-c` [命令行选项](https://cn.angie.software//angie/docs/configuration/runtime.md#runtime-cli-options) 以不同的配置文件启动 Angie。 | `<prefix>/conf/angie.conf`  |
| `--error-log-path=`path             | 设置主要错误、警告和诊断日志文件的名称。<br/>安装后,可以随时在 `angie.conf` 配置文件中使用<br/>[error_log](https://cn.angie.software//angie/docs/configuration/modules/core.md#error-log) 指令更改文件名。                                                                               | `<prefix>/logs/error.log`   |
| `--pid-path=`path                   | 设置 `angie.pid` 文件的名称,该文件将存储主进程的进程 ID。<br/>安装后,可以随时在 `angie.conf` 配置文件中使用 [pid](https://cn.angie.software//angie/docs/configuration/modules/core.md#pid)<br/>指令更改文件名。                                                                          | `<prefix>/logs/angie.pid`   |
| `--lock-path=`path                  | 设置锁文件名的前缀。安装后,可以随时在 `angie.conf`<br/>配置文件中使用 [lock_file](https://cn.angie.software//angie/docs/configuration/modules/core.md#lock-file) 指令更改该值。                                                                                               | `<prefix>/logs/angie.lock`  |
| `--http-acme-client-path=`path      | 设置用于存储已定义 [acme](https://cn.angie.software//angie/docs/configuration/modules/http/http_acme.md#id4) 指令的 `server`<br/>块的证书和密钥的目录。                                                                                                              | `<prefix>/acme_client`      |
| `--http-log-path=`path              | 设置 HTTP 服务器的主要请求日志文件的名称。安装后,<br/>可以随时在 `angie.conf` 配置文件中使用<br/>[access_log](https://cn.angie.software//angie/docs/configuration/modules/http/http_log.md#access-log) 指令更改文件名。                                                                | `<prefix>/logs/access.log`  |
| `--http-client-body-temp-path=`path | 定义用于存储保存客户端请求正文的临时文件的目录。安装后,<br/>可以随时在 `angie.conf` 配置文件中使用<br/>[client_body_temp_path](https://cn.angie.software//angie/docs/configuration/modules/http/index.md#client-body-temp-path) 指令更改该目录。                                             | `<prefix>/client_body_temp` |
| `--http-proxy-temp-path=`path       | 定义用于存储从代理服务器接收的数据的临时文件的目录。安装后,<br/>可以随时在 `angie.conf` 配置文件中使用<br/>[proxy_temp_path](https://cn.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-temp-path) 指令更改该目录。                                                  | `<prefix>/proxy_temp`       |
| `--http-fastcgi-temp-path=`path     | 定义用于存储从 FastCGI 服务器接收的数据的临时文件的目录。<br/>安装后,可以随时在 `angie.conf` 配置文件中使用<br/>[fastcgi_temp_path](https://cn.angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-temp-path) 指令更改该目录。                                     | `<prefix>/fastcgi_temp`     |
| `--http-uwsgi-temp-path=`path       | 定义用于存储从 uWSGI 服务器接收的数据的临时文件的目录。<br/>安装后,可以随时在 `angie.conf` 配置文件中使用<br/>[uwsgi_temp_path](https://cn.angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-temp-path) 指令更改该目录。                                             | `<prefix>/uwsgi_temp`       |
| `--http-scgi-temp-path=`path        | 定义用于存储从 SCGI 服务器接收的数据的临时文件的目录。<br/>安装后,可以随时在 `angie.conf` 配置文件中使用<br/>[scgi_temp_path](https://cn.angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-temp-path) 指令更改该目录。                                                 | `<prefix>/scgi_temp`        |

<a id="install-source-features"></a>

### 功能和依赖项

| `--with-select_module`, `--without-select_module`   | 启用或禁用构建一个允许服务器使用 `select()` 方法的模块。如果平台似乎不支持更合适的方法,例如 `kqueue`、`epoll` 或 `/dev/poll`,则该模块会自动构建。                                                                                                                                                                                                                                                                                                                                                                      |
|-----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--with-poll_module`, `--without-poll_module`       | 启用或禁用构建一个允许服务器使用 `poll()` 方法的模块。如果平台似乎不支持更合适的方法,例如 `kqueue`、`epoll` 或 `/dev/poll`,则该模块会自动构建。                                                                                                                                                                                                                                                                                                                                                                        |
| `--with-threads`                                    | 启用使用 [线程池](https://cn.angie.software//angie/docs/configuration/modules/core.md#thread-pool) (`aio threads` 模式)。                                                                                                                                                                                                                                                                                                                                                     |
| `--with-file-aio`                                   | 启用在 FreeBSD 和 Linux 上使用 [异步文件 I/O](https://cn.angie.software//angie/docs/configuration/modules/http/index.md#aio) (AIO) (`aio on` 模式)。                                                                                                                                                                                                                                                                                                                              |
| `--with-debug`                                      | 启用 [调试日志](https://cn.angie.software//angie/docs/troubleshooting.md#debug-logging)。                                                                                                                                                                                                                                                                                                                                                                                  |
| `--without-http-cache`                              | 禁用 HTTP 缓存。                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `--with-pcre`, `--with-pcre=`path                   | 启用使用 PCRE 库。<br/><br/>可选参数设置 PCRE 库源代码的路径。需要从 [PCRE](http://www.pcre.org/) 站点下载并解压库分发包。其余部分由 Angie 的 **./configure** 和 **make** 命令完成。<br/><br/>该库对于 `location` 指令中的正则表达式支持以及 [Rewrite](https://cn.angie.software//angie/docs/configuration/modules/http/http_rewrite.md#http-rewrite) 模块是 **必需的**。                                                                                                                                                                  |
| `--with-pcre-opt=`parameters                        | 设置 PCRE 的附加构建参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `--with-pcre-jit`                                   | 使用 JIT 编译支持构建 PCRE 库([pcre_jit](https://cn.angie.software//angie/docs/configuration/modules/core.md#pcre-jit) 指令)。                                                                                                                                                                                                                                                                                                                                                  |
| `--without-pcre`                                    | 禁用使用 PCRE 库。                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `--without-pcre2`                                   | 禁用使用 PCRE2 库而不是原始 PCRE 库。                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `--with-libatomic`, `--with-libatomic=`path         | 启用使用 **libatomic_ops** 库构建。可选参数设置库源代码的路径。                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `--with-openssl=`path                               | 启用静态构建并设置 OpenSSL 库源代码的路径。AWS-LC 可用作与 OpenSSL 兼容的库。                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `--with-openssl-opt=`parameters                     | 设置 OpenSSL 的附加构建参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `--with-ntls`                                       | 在使用支持 NTLS 的 SSL 库构建时,启用 HTTP 模块([服务器端](https://cn.angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-ntls)、[客户端](https://cn.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-ssl-ntls))和流模块([服务器端](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_ssl.md#s-ssl-ntls)、[客户端](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_proxy.md#s-proxy-ssl-ntls))中的 NTLS 支持。 |
| `--with-zlib=`path                                  | 设置 **zlib** 库源代码的路径。库分发包(版本 1.1.3 — 1.2.11)需要从 [zlib 站点](http://zlib.net/) 下载并解压。其余部分由 Angie 的 **./configure** 和 **make** 命令完成。<br/><br/>该库对于 [GZip](https://cn.angie.software//angie/docs/configuration/modules/http/http_gzip.md#http-gzip) 模块是 **必需的**。                                                                                                                                                                                                          |
| `--with-zlib-opt=`parameters                        | 设置 **zlib** 的附加构建参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `--with-zlib-asm=`cpu                               | 启用使用为以下处理器之一优化的汇编优化来构建 **zlib**:`pentium`、`pentiumpro`。                                                                                                                                                                                                                                                                                                                                                                                                             |

<a id="enabling-and-disabling-modules"></a>

### 启用和禁用模块

您可以禁用默认启用的模块,或启用默认可用但已禁用的模块。

<a id="http-1"></a>

#### HTTP

启用附加模块：

| `--with-http_acme_module`                                                    | 启用构建 [ACME](https://cn.angie.software//angie/docs/configuration/modules/http/http_acme.md#http-acme) 模块，该模块启用 ACME 协议。                                                                       |
|------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--with-http_addition_module`                                                | 启用构建 [Addition](https://cn.angie.software//angie/docs/configuration/modules/http/http_addition.md#http-addition) 模块，该模块允许在响应前后添加文本。                                                          |
| `--with-http_auth_request_module`                                            | 启用构建 [Auth Request](https://cn.angie.software//angie/docs/configuration/modules/http/http_auth_request.md#http-auth-request) 模块，该模块提供基于子请求结果的客户端授权能力。                                        |
| `--with-http_dav_module`                                                     | 启用构建 [DAV](https://cn.angie.software//angie/docs/configuration/modules/http/http_dav.md#http-dav) 模块，该模块旨在通过 WebDAV 协议在服务器上自动化文件管理任务。                                                        |
| `--with-http_degradation_module`                                             | 启用构建降级模块，该模块允许为某些 `location` 块返回 HTTP 状态码 204 或 444。<br/><br/>此模块只能在 `sbrk(0)` 显示进程实际分配的内存量的情况下使用。换句话说，该模块默认在 FreeBSD 7.0 版本之前工作。从 7.0 版本开始,它只有在设置 `MALLOC_OPTIONS=Dm` 时才能工作。在 Linux 上它不起作用。 |
| `--with-http_flv_module`                                                     | 启用构建 [FLV](https://cn.angie.software//angie/docs/configuration/modules/http/http_flv.md#http-flv) 模块，该模块为 Flash Video (FLV) 文件提供服务器端伪流支持。                                                    |
| `--with-http_geoip_module`, `--with-http_geoip_module=dynamic`               | 启用构建 [GeoIP](https://cn.angie.software//angie/docs/configuration/modules/http/http_geoip.md#http-geoip) 模块，该模块创建的变量值基于客户端 IP 地址和现成的 [MaxMind](http://www.maxmind.com/) 数据库确定。                |
| `--with-http_gunzip_module`                                                  | 启用构建 [GunZIP](https://cn.angie.software//angie/docs/configuration/modules/http/http_gunzip.md#http-gunzip) 模块，该模块允许为不支持 `gzip` 压缩方法的客户端解压缩带有 `Content-Encoding: gzip` 的响应。                   |
| `--with-http_gzip_static_module`                                             | 启用构建 [Gzip Static](https://cn.angie.software//angie/docs/configuration/modules/http/http_gzip_static.md#http-gzip-static) 模块，该模块允许提供具有相同名称和 `.gz` 扩展名的预压缩文件，而不是常规文件。                         |
| `--with-http_image_filter_module`, `--with-http_image_filter_module=dynamic` | 启用构建 [Image Filter](https://cn.angie.software//angie/docs/configuration/modules/http/http_image_filter.md#http-image-filter) 模块，该模块允许转换 JPEG、GIF、PNG 和 WebP 格式的图像。                           |
| `--with-http_mp4_module`                                                     | 启用构建 [MP4](https://cn.angie.software//angie/docs/configuration/modules/http/http_mp4.md#http-mp4) 模块，该模块为 MP4 格式文件提供服务器端伪流支持。                                                                |
| `--with-http_perl_module`, `--with-http_perl_module=dynamic`                 | 启用构建 [Perl](https://cn.angie.software//angie/docs/configuration/modules/http/http_perl.md#http-perl) 模块。                                                                                     |
| `--with-perl_modules_path=`path                                              | 设置 Perl 模块文件所在的目录。                                                                                                                                                                           |
| `--with-perl=`path                                                           | 设置 Perl 可执行文件的名称。                                                                                                                                                                            |
| `--with-http_random_index_module`                                            | 启用构建 [Random Index](https://cn.angie.software//angie/docs/configuration/modules/http/http_random_index.md#http-random-index) 模块，该模块处理以斜杠 (`/`) 结尾的请求，并返回一个随机文件作为目录的索引文件。                     |
| `--with-http_realip_module`                                                  | 启用构建 [RealIP](https://cn.angie.software//angie/docs/configuration/modules/http/http_realip.md#http-realip) 模块，该模块允许将客户端地址更改为在指定头字段中传递的地址。                                                    |
| `--with-http_secure_link_module`                                             | 启用构建 [Secure Link](https://cn.angie.software//angie/docs/configuration/modules/http/http_secure_link.md#http-secure-link) 模块。                                                                |
| `--with-http_slice_module`                                                   | 启用构建 [Slice](https://cn.angie.software//angie/docs/configuration/modules/http/http_slice.md#http-slice) 模块，该模块允许将请求拆分为子请求，每个子请求返回响应的特定范围。该模块提供大型响应的高效缓存。                                     |
| `--with-http_ssl_module`                                                     | 为 HTTP 服务器启用 [SSL](https://cn.angie.software//angie/docs/configuration/modules/http/http_ssl.md#http-ssl) 支持。<br/><br/>此模块 **需要** OpenSSL 库。                                                 |
| `--with-http_stub_status_module`                                             | 启用构建 [Stub Status](https://cn.angie.software//angie/docs/configuration/modules/http/http_stub_status.md#http-stub-status) 模块，该模块提供对基本服务器状态信息的访问。                                             |
| `--with-http_sub_module`                                                     | 启用构建 [Sub](https://cn.angie.software//angie/docs/configuration/modules/http/http_sub.md#http-sub) 模块，该模块允许将响应中一个指定的字符串修改为另一个。                                                                |
| `--with-http_upstream_probe_icmp` (PRO)                                      | 为 [upstream_probe (PRO)](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream_probe.md#u-upstream-probe) 指令启用 ICMP 回显探测。需要操作系统 ICMP 支持。                            |
| `--with-http_v2_module`                                                      | 启用 [HTTP/2](https://cn.angie.software//angie/docs/configuration/modules/http/http_v2.md#http-v2) 模块。                                                                                         |
| `--with-http_v3_module`                                                      | 启用 [HTTP/3](https://cn.angie.software//angie/docs/configuration/modules/http/http_v3.md#http-v3) 模块。                                                                                         |

#### NOTE
对于构建，**强烈建议** 使用支持 [QUIC](https://www.rfc-editor.org/rfc/rfc9000.html) 协议的 SSL 库：

BoringSSL

使用 [BoringSSL](https://boringssl.googlesource.com/boringssl) 构建：

```console
$ ./configure
   --with-debug
   --with-http_v3_module
   --with-cc-opt="-I../boringssl/include"
   --with-ld-opt="-L../boringssl/build/ssl
                  -L../boringssl/build/crypto"
```

LibreSSL

使用 [LibreSSL](https://www.libressl.org/) 构建：

```console
$ ./configure
   --with-debug --with-http_v3_module
   --with-cc-opt="-I../libressl/build/include"
   --with-ld-opt="-L../libressl/build/lib"
```

QuicTLS

使用 [QuicTLS](https://github.com/quictls/openssl) 构建：

```console
$ ./configure
      --with-debug
      --with-http_v3_module
      --with-cc-opt="-I../quictls/build/include"
      --with-ld-opt="-L../quictls/build/lib"
```

如果不使用这些库，将使用 [OpenSSL](https://openssl.org/) 库的兼容模式，在该模式下不支持 [早期数据](https://datatracker.ietf.org/doc/html/rfc8446#section-2.3) 发送，并且缺少其他功能，如会话重用。这样的构建将 **只能** 与使用相同模式的 OpenSSL 的客户端和服务器交互。

| `--with-http_xslt_module`, `--with-http_xslt_module=dynamic`   | 启用构建 [XSLT](https://cn.angie.software//angie/docs/configuration/modules/http/http_xslt.md#http-xslt) 模块，该模块允许使用 XSLT 样式表转换 XML 响应。<br/><br/>此模块 **需要** **libxml2** 和 **libxslt** 库。                                                            |
|----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--with-google_perftools_module`                               | 启用构建 [Google PerfTools](https://cn.angie.software//angie/docs/configuration/modules/google_perftools.md#google-perftools) 模块，该模块支持使用 [Google Performance Tools](https://github.com/gperftools/gperftools) 对 Angie 工作进程进行性能分析。该模块面向 Angie 开发人员。 |

禁用标准模块：

| `--without-http`                            | 禁用 [HTTP](https://cn.angie.software//angie/docs/configuration/modules/http/index.md#http-core) 服务器。                                                                                                                                                                   |
|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--without-http_access_module`              | 禁用构建 [Access](https://cn.angie.software//angie/docs/configuration/modules/http/http_access.md#http-access) 模块，该模块允许限制对特定客户端地址的访问。                                                                                                                                     |
| `--without-http_api_module`                 | 禁用构建 [API](https://cn.angie.software//angie/docs/configuration/modules/http/http_api.md#http-api) 模块，该模块提供 RESTful HTTP 接口，用于访问有关 Web 服务器实例的基于 JSON 的信息。                                                                                                              |
| `--without-http_metric_module`              | 禁用构建 [Metric](https://cn.angie.software//angie/docs/configuration/modules/http/http_metric.md#http-metric) 模块。                                                                                                                                                        |
| `--without-http_auth_basic_module`          | 禁用构建 [Auth Basic](https://cn.angie.software//angie/docs/configuration/modules/http/http_auth_basic.md#http-auth-basic) 模块，该模块允许通过使用 HTTP 基本身份验证协议验证用户名和密码来限制对资源的访问。                                                                                                   |
| `--without-http_autoindex_module`           | 禁用构建 [AutoIndex](https://cn.angie.software//angie/docs/configuration/modules/http/http_autoindex.md#http-autoindex) 模块，该模块处理以斜杠字符 (`/`) 结尾的请求，并在 [Index](https://cn.angie.software//angie/docs/configuration/modules/http/http_index.md#http-index) 模块找不到索引文件时生成目录列表。 |
| `--without-http_browser_module`             | 禁用构建 [Browser](https://cn.angie.software//angie/docs/configuration/modules/http/http_browser.md#http-browser) 模块，该模块创建的变量值取决于 `User-Agent` 请求头字段的值。                                                                                                                   |
| `--without-http_charset_module`             | 禁用构建 [Charset](https://cn.angie.software//angie/docs/configuration/modules/http/http_charset.md#http-charset) 模块，该模块将指定的字符集添加到 `Content-Type` 响应头字段，并且可以将数据从一种字符集转换为另一种字符集。                                                                                           |
| `--without-http_empty_gif_module`           | 禁用构建 [模块](https://cn.angie.software//angie/docs/configuration/modules/http/http_empty_gif.md#http-empty-gif)，该模块发出单像素透明 GIF。                                                                                                                                          |
| `--without-http_fastcgi_module`             | 禁用构建 [FastCGI](https://cn.angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#http-fastcgi) 模块，该模块将请求传递给 FastCGI 服务器。                                                                                                                               |
| `--without-http_geo_module`                 | 禁用构建 [Geo](https://cn.angie.software//angie/docs/configuration/modules/http/http_geo.md#http-geo) 模块，该模块创建的变量值取决于客户端 IP 地址。                                                                                                                                           |
| `--without-http_gzip_module`                | 禁用构建 [模块](https://cn.angie.software//angie/docs/configuration/modules/http/http_gzip.md#http-gzip)，该模块压缩 HTTP 服务器响应。<br/><br/>此模块 **需要** **zlib** 库。                                                                                                                  |
| `--without-http_grpc_module`                | 禁用构建 [gRPC](https://cn.angie.software//angie/docs/configuration/modules/http/http_grpc.md#http-grpc) 模块，该模块将请求传递给 gRPC 服务器。                                                                                                                                           |
| `--without-http_limit_conn_module`          | 禁用构建 [Limit Conn](https://cn.angie.software//angie/docs/configuration/modules/http/http_limit_conn.md#http-limit-conn) 模块，该模块限制每个键的连接数，例如，来自单个 IP 地址的连接数。                                                                                                             |
| `--without-http_limit_req_module`           | 禁用构建 [Limit Req](https://cn.angie.software//angie/docs/configuration/modules/http/http_limit_req.md#http-limit-req) 模块，该模块限制每个键的请求处理速率，例如，来自单个 IP 地址的请求处理速率。                                                                                                          |
| `--without-http_map_module`                 | 禁用构建 [Map](https://cn.angie.software//angie/docs/configuration/modules/http/http_map.md#http-map) 模块，该模块创建的变量值取决于其他变量的值。                                                                                                                                              |
| `--without-http_memcached_module`           | 禁用构建 [Memcached](https://cn.angie.software//angie/docs/configuration/modules/http/http_memcached.md#http-memcached) 模块，该模块从 memcached 服务器获取响应。                                                                                                                        |
| `--without-http_mirror_module`              | 禁用构建 [Mirror](https://cn.angie.software//angie/docs/configuration/modules/http/http_mirror.md#http-mirror) 模块，该模块通过创建后台镜像子请求来实现原始请求的镜像。                                                                                                                               |
| `--without-http_prometheus_module`          | 禁用构建 HTTP 服务器的 [Prometheus](https://cn.angie.software//angie/docs/configuration/modules/http/http_prometheus.md#http-prometheus) 模块。                                                                                                                                  |
| `--without-http_proxy_module`               | 禁用构建 HTTP 服务器的 [Proxy](https://cn.angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy) 模块。                                                                                                                                                 |
| `--without-http_referer_module`             | 禁用构建 [Referer](https://cn.angie.software//angie/docs/configuration/modules/http/http_referer.md#http-referer) 模块，该模块可以阻止 `Referer` 头字段值无效的请求访问站点。                                                                                                                     |
| `--without-http_rewrite_module`             | 禁用构建 [Rewrite](https://cn.angie.software//angie/docs/configuration/modules/http/http_rewrite.md#http-rewrite) 模块，该模块允许 HTTP 服务器重定向请求并更改其 URI。<br/><br/>此模块 **需要** PCRE 库。                                                                                             |
| `--without-http_scgi_module`                | 禁用构建 [SCGI](https://cn.angie.software//angie/docs/configuration/modules/http/http_scgi.md#http-scgi) 模块，该模块将请求传递给 SCGI 服务器。                                                                                                                                           |
| `--without-http_split_clients_module`       | 禁用构建 [Split Clients](https://cn.angie.software//angie/docs/configuration/modules/http/http_split_clients.md#http-split-clients) 模块，该模块为 A/B 测试创建变量。                                                                                                                   |
| `--without-http_ssi_module`                 | 禁用构建 [SSI](https://cn.angie.software//angie/docs/configuration/modules/http/http_ssi.md#http-ssi) 模块，该模块处理通过它的响应中的 SSI（服务器端包含）命令。                                                                                                                                     |
| `--without-http_upstream_hash_module`       | 禁用构建实现 [hash](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-hash) 负载均衡方法的模块。                                                                                                                                                    |
| `--without-http_upstream_ip_hash_module`    | 禁用构建实现 [ip_hash](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-ip-hash) 负载均衡方法的模块。                                                                                                                                              |
| `--without-http_upstream_keepalive_module`  | 禁用构建提供到上游服务器的 [连接缓存](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-keepalive) 的模块。                                                                                                                                              |
| `--without-http_upstream_least_conn_module` | 禁用构建实现 [least_conn](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-least-conn) 负载均衡方法的模块。                                                                                                                                        |
| `--without-http_upstream_random_module`     | 禁用构建实现 [random](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-random) 负载均衡方法的模块。                                                                                                                                                |
| `--without-http_upstream_sticky_module`     | 禁用构建实现 [会话持久性](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-sticky) 的模块，确保客户端会话中的所有请求都传递到上游中的同一服务器。                                                                                                                            |
| `--without-http_upstream_zone_module`       | 禁用构建允许在 [共享内存区域](https://cn.angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-zone) 中存储上游运行时状态的模块。                                                                                                                                             |
| `--without-http_userid_module`              | 禁用构建 [UserID](https://cn.angie.software//angie/docs/configuration/modules/http/http_userid.md#http-userid) 模块，该模块设置适合客户端标识的 cookie。                                                                                                                                   |
| `--without-http_uwsgi_module`               | 禁用构建 [uWSGI](https://cn.angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#http-uwsgi) 模块，该模块将请求传递给 uWSGI 服务器。                                                                                                                                       |

<a id="stream-modules"></a>

#### Stream 模块

启用附加模块：

#### \* - `--with-stream`, `--with-stream=dynamic`<br/>  - 启用核心 [Stream](https://cn.angie.software//angie/docs/configuration/modules/stream/index.md#stream-core) 模块，<br/>    用于通用 TCP/UDP 代理和负载均衡。

| `--with-stream_acme_module`                                        | 启用构建 [ACME](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_acme.md#stream-acme) 模块，<br/>该模块启用 ACME 协议。                                                                                                                                                                                                                                            |
|--------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--with-stream_geoip_module`, `--with-stream_geoip_module=dynamic` | 启用 [GeoIP](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_geoip.md#stream-geoip) 模块，<br/>该模块根据客户端 IP 地址和预编译的 [MaxMind](http://www.maxmind.com/)<br/>数据库创建变量。                                                                                                                                                                                      |
| `--with-stream_mqtt_preread_module`                                | 启用 [MQTT Preread](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_mqtt_preread.md#stream-mqtt-preread) 模块，该模块允许<br/>从 MQTT [3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718028)<br/>和 [5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901033)<br/>版本的 `CONNECT` 数据包中提取客户端 ID 和用户名。 |
| `--with-stream_rdp_preread_module`                                 | 启用 [RDP Preread](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_rdp_preread.md#stream-rdp-preread) 模块，该模块允许<br/>从 RDP 会话中提取 cookie。                                                                                                                                                                                                               |
| `--with-stream_realip_module`                                      | 启用 [RealIP](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_realip.md#stream-realip) 模块，<br/>该模块将客户端地址更改为 PROXY 协议头中发送的地址。                                                                                                                                                                                                                         |
| `--with-stream_ssl_module`                                         | 为 Stream 服务器启用 [SSL](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_ssl.md#stream-ssl) 支持。<br/><br/>构建和运行此模块\*\*需要\*\* OpenSSL 库。                                                                                                                                                                                                                 |
| `--with-stream_ssl_preread_module`                                 | 启用 [SSL Preread](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_ssl_preread.md#stream-ssl-preread) 模块，该模块允许<br/>在不终止 SSL/TLS 的情况下从 [ClientHello](https://datatracker.ietf.org/doc/html/rfc5246#section-7.4.1.2)<br/>消息中提取信息。                                                                                                                      |
| `--with-stream_upstream_probe_icmp` (PRO)                          | 为 [upstream_probe (PRO)](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_upstream_probe.md#s-u-upstream-probe) 指令启用 ICMP 回显探测。需要操作系统 ICMP 支持。                                                                                                                                                                                                      |

禁用标准模块：

#### \* - `--without-stream_access_module`<br/>  - 禁用 [Access](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_access.md#stream-access) 模块，<br/>    该模块允许限制对特定客户端地址的访问。

| `--without-stream_geo_module`                 | 禁用 [Geo](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_geo.md#stream-geo) 模块，<br/>该模块根据客户端 IP 地址创建具有不同值的变量。                           |
|-----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--without-stream_limit_conn_module`          | 禁用 [Limit Conn](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_limit_conn.md#stream-limit-conn) 模块，<br/>该模块限制每个键的连接数，例如来自单个 IP 地址的连接数。 |
| `--without-stream_map_module`                 | 禁用 [Map](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_map.md#stream-map) 模块，<br/>该模块根据其他变量的值创建变量。                                    |
| `--without-stream_return_module`              | 禁用 [Return](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_return.md#stream-return) 模块，<br/>该模块向客户端发送指定的值，然后关闭连接。                      |
| `--without-stream_set_module`                 | 禁用 [Set](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_set.md#stream-set) 模块，<br/>该模块为变量设置值。                                          |
| `--without-stream_split_clients_module`       | 禁用 [Split Clients](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_split_clients.md#stream-split-clients) 模块，<br/>该模块为 A/B 测试创建变量。      |
| `--without-stream_upstream_hash_module`       | 禁用实现 [hash](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-hash) 负载均衡方法的模块。                                            |
| `--without-stream_upstream_least_conn_module` | 禁用实现 [least_conn](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-least-conn) 负载均衡方法的模块。                                |
| `--without-stream_upstream_random_module`     | 禁用实现 [random](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-random) 负载均衡方法的模块。                                        |
| `--without-stream_upstream_zone_module`       | 禁用在 [共享内存区](https://cn.angie.software//angie/docs/configuration/modules/stream/stream_upstream.md#s-u-zone) 中存储上游运行时状态的模块。                                        |

<a id="mail"></a>

#### Mail

启用附加模块：

#### \* - `--with-mail`, `--with-mail=dynamic`<br/>  - 启用核心 [Mail](https://cn.angie.software//angie/docs/configuration/modules/mail/index.md#mail-core) 模块，<br/>    该模块支持 POP3、IMAP4 和 SMTP。

| `--with-mail_ssl_module`   | 为 Mail 服务器启用 [SSL](https://cn.angie.software//angie/docs/configuration/modules/mail/mail_ssl.md#mail-ssl) 支持。<br/><br/>构建和运行此模块\*\*需要\*\* OpenSSL 库。   |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|

禁用标准模块：

#### \* - `--without-mail_imap_module`<br/>  - 在 Mail 服务器中禁用 [IMAP](https://cn.angie.software//angie/docs/configuration/modules/mail/mail_imap.md#mail-imap) 协议。

| `--without-mail_pop3_module`   | 在 Mail 服务器中禁用 [POP3](https://cn.angie.software//angie/docs/configuration/modules/mail/mail_pop3.md#mail-pop3) 协议。   |
|--------------------------------|---------------------------------------------------------------------------------------------------------------------|
| `--without-mail_smtp_module`   | 在 Mail 服务器中禁用 [SMTP](https://cn.angie.software//angie/docs/configuration/modules/mail/mail_smtp.md#mail-smtp) 协议。   |

<a id="other-options"></a>

#### 其他选项

#### \* - `--with-cpp_test_module`<br/>  - 启用 CPP Test 模块。它主要用于开发和测试目的，<br/>    不适用于生产环境。

| `--add-module=`path         | 启用在指定路径构建外部模块。                                                                                                                                                                            |
|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--add-dynamic-module=`path | 启用在指定路径构建外部动态模块。                                                                                                                                                                          |
| `--with-compat`             | 启用动态模块兼容模式。启用后，Angie 可以加载和使用<br/>为相同 Angie 版本构建的动态模块，即使这些模块是使用不同选项构建的。<br/>Angie PRO 只能加载为 Angie PRO 构建的模块；<br/>由于模块签名不同，Angie (OSS) 模块会被拒绝。                                              |
| `--with-cc=`path            | 设置构建期间使用的编译器。                                                                                                                                                                             |
| `--with-cpp=`path           | 设置构建期间使用的预处理器。                                                                                                                                                                            |
| `--with-cc-opt=`parameters  | 设置将添加到 `CFLAGS` 变量的附加参数。<br/>在 FreeBSD 下使用系统 PCRE 库时，应指定<br/>`--with-cc-opt="-I /usr/local/include"`。<br/>如果需要增加 `select()` 支持的文件数，<br/>也可以在此处指定，例如 `--with-cc-opt="-D FD_SETSIZE=2048"`。 |
| `--with-ld-opt=`parameters  | 设置链接期间使用的附加参数。在 FreeBSD 下使用系统 PCRE 库时，<br/>应指定 `--with-ld-opt="-L /usr/local/lib"`。                                                                                                       |
| `--with-cpu-opt=`cpu        | 启用针对以下处理器之一优化的构建：<br/>`pentium`、`pentiumpro`、`pentium3`、`pentium4`、<br/>`athlon`、`opteron`、`sparc32`、`sparc64`、<br/>`ppc64`。                                                              |

<a id="examples-2"></a>

### 示例

**简单的启用 HTTPS 的构建**。此基本配置使用 SSL/TLS 启用 HTTPS 支持，
包含必要的依赖项（用于正则表达式的 PCRE、用于压缩的 **zlib**
以及用于 SSL/TLS 的 OpenSSL）：

```console
$ ./configure \
    --sbin-path=/usr/sbin/angie \
    --conf-path=/etc/angie/angie.conf \
    --pid-path=/run/angie.pid \
    --with-http_ssl_module \
    --with-pcre=../pcre2-10.40 \
    --with-zlib=../zlib-1.3 \
    --with-openssl=../openssl-3.0.8
```

**性能优化构建**。此配置针对性能进行了优化，包括 HTTP/2 支持、
**gzip** 静态压缩、PCRE 的 JIT 以及异步 I/O；
还启用了线程池以高效处理高负载：

```console
$ ./configure \
    --sbin-path=/usr/sbin/angie \
    --conf-path=/etc/angie/angie.conf \
    --pid-path=/run/angie.pid \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_gzip_static_module \
    --with-pcre=../pcre2-10.40 \
    --with-pcre-jit \
    --with-zlib=../zlib-1.3 \
    --with-threads \
    --with-file-aio
```

**具有 TCP/UDP 代理的负载均衡器**。此配置为 HTTP 和非 HTTP 服务设置负载均衡器：

```console
$ ./configure \
    --sbin-path=/usr/sbin/angie \
    --conf-path=/etc/angie/angie.conf \
    --pid-path=/run/angie.pid \
    --with-stream \
    --with-stream_ssl_module \
    --with-pcre=../pcre2-10.40 \
    --with-zlib=../zlib-1.3
```

**专用构建**。此配置包括 HTTPS、HTTP/2、压缩、增强的安全性和性能，
以及用于 Brotli 压缩和缓存管理的附加模块，针对 HTTP 和 TCP/UDP 代理进行了优化：

```console
$ ./configure \
    --prefix=/usr/local/angie \                        # Angie 的安装目录
    --sbin-path=/usr/sbin/angie \                      # Angie 二进制文件的路径
    --conf-path=/etc/angie/angie.conf \                # 主配置文件的路径
    --pid-path=/run/angie.pid \                        # PID 文件的路径
    --lock-path=/var/lock/angie.lock \                 # 锁文件的路径
    --error-log-path=/var/log/angie/error.log \        # 错误日志文件的路径
    --http-log-path=/var/log/angie/access.log \        # 访问日志文件的路径
    --with-http_ssl_module \                           # 启用 SSL 模块以支持 HTTPS
    --with-http_v2_module \                            # 启用 HTTP/2 支持以提升性能
    --with-http_realip_module \                        # 允许 Angie 正确处理 X-Real-IP 和 X-Forwarded-For 头
    --with-http_gzip_static_module \                   # 提供预压缩的 .gz 文件以减少 CPU 负载
    --with-http_stub_status_module \                   # 提供状态页面
    --with-threads \                                   # 启用线程池以在高负载下提升性能
    --with-file-aio \                                  # 启用异步 I/O
    --with-stream \                                    # 启用 TCP/UDP 代理功能
    --with-stream_ssl_module \                         # 为 TCP/UDP 代理添加 SSL/TLS 支持
    --with-pcre=../pcre2-10.40 \                       # 指定 PCRE 库的路径以支持正则表达式
    --with-pcre-jit \                                  # 为 PCRE 启用即时编译
    --with-zlib=../zlib-1.3 \                          # 指定 zlib 库的路径以支持压缩
    --with-openssl=../openssl-3.0.8 \                  # 指定 OpenSSL 库的路径以支持 SSL/TLS
    --with-openssl-opt="enable-ec_nistp_64_gcc_128" \  # 为 64 位 NIST 曲线优化 OpenSSL
    --add-module=../ngx_brotli \                       # 添加第三方 ngx_brotli 模块以支持 Brotli 压缩
    --add-dynamic-module=../ngx_cache_purge            # 添加第三方 ngx_cache_purge 模块以进行缓存管理
```
