从源代码构建 Angie#
我们建议从官方预构建的 软件包 安装 Angie。 但是,如果您仍然需要自己的构建:
-
从 我们的网站 下载
.tar.gz
存档:$ curl -O https://download.angie.software/files/angie-1.7.0.tar.gz
-
解压源代码并浏览到源代码目录:
$ tar -xpf angie-1.7.0.tar.gz $ cd angie-1.7.0
-
为了准备构建,请使用 ./configure 脚本来确定构建发生的操作系统的具体特性,特别是 Angie 可以用来处理连接的方法。成功运行后,脚本会创建一个
Makefile
。在运行 ./configure 之前,浏览并设置 build options:
$ ./configure <OPTIONS>
-
当
Makefile
准备好后,构建并安装 Angie:$ make $ make install
构建选项#
通用#
选项 |
描述 |
默认 |
---|---|---|
|
打印帮助信息。 |
|
|
设置一个非特权用户的名称,其凭据将由工作进程使用。安装后,可以在 |
|
|
设置一个非特权组的名称,其凭据将由工作进程使用。安装后,可以在 |
|
|
设置构建的可选名称。 |
|
|
设置构建目录。 |
|
|
指定缓存构建工件的目录。 |
如果设置时没有路径,则使用 |
路径#
选项 |
描述 |
默认 |
---|---|---|
|
定义存储服务器文件的目录。此目录也将用于 configure 设置的所有相对路径(除库源路径外)以及 |
|
|
设置 Angie 可执行文件的名称。此名称仅在安装期间使用。 |
|
|
定义 Angie 动态模块的安装目录。 |
|
|
设置 |
|
|
设置主要错误、警告和诊断日志文件的名称。安装后,可以在 |
|
|
设置 |
|
|
设置 |
|
|
设置目录以存储为定义了 acme 指令的 |
|
|
设置 HTTP 服务器的主要请求日志文件的名称。安装后,可以在 |
|
|
定义用于存储临时文件的目录,这些文件保存客户端请求体。安装后,可以在 |
|
|
定义用于存储从代理服务器接收的数据的临时文件的目录。安装后,可以在 |
|
|
定义用于存储从 FastCGI 服务器接收的数据的临时文件的目录。安装后,可以在 |
|
|
定义用于存储从 uWSGI 服务器接收的数据的临时文件的目录。安装后,可以在 |
|
|
定义用于存储从 SCGI 服务器接收的数据的临时文件的目录。安装后,可以在 |
|
功能和依赖项#
|
启用或禁用构建一个允许服务器使用 |
|
启用使用 线程池。 |
|
启用在 FreeBSD 和 Linux 上使用 异步文件I/O (AIO)。 |
|
启用 调试日志。 |
|
禁用 HTTP 缓存。 |
|
启用 PCRE 库。 可选设置是 PCRE 库源的路径。需要从 PCRE 站点 下载并解压库分发。其余部分由 Angie's ./configure 和 make 命令完成。 该库对于 |
|
设置 PCRE 的附加构建选项。 |
|
使用 JIT 编译支持构建 PCRE 库(pcre_jit 指令)。 |
|
禁用使用 PCRE 库。 |
|
禁用使用 PCRE2 库而不是原始 PCRE 库。 |
|
强制使用 libatomic_ops 库。可选设置是库源的路径。 |
|
启用并设置 OpenSSL 库源的路径。 |
|
设置 OpenSSL 的附加构建选项。 |
|
在 HTTP 和流模块中启用 server-side 和 client-side NTLS 支持 (server-side, client-side),当与启用 NTLS 的 SSL 库链接时。 |
|
设置 zlib 库源的路径。库分发(版本 1.1.3 — 1.2.11)需要从 zlib 站点 下载并解压。其余部分由 Angie's ./configure 和 make 命令完成。 该库对于 GZip 模块是 必需的。 |
|
设置 |
|
启用以汇编源构建 zlib,这些源针对以下 CPU 之一进行了优化: |
启用和禁用模块#
您可以禁用默认包含的模块,或者启用可用但默认禁用的模块。
HTTP#
启用附加模块:
|
启用支持 ACME 协议的 ACME 模块。 |
|
启用在响应之前和之后添加文本的 Addition 模块。 |
|
启用根据子请求结果实现客户端授权的 Auth Request 模块。 |
|
启用通过 WebDAV 协议提供文件管理自动化的 DAV 模块。 |
|
启用允许为某些位置返回 HTTP 状态码 204 或 444 的降级模块。 该模块只能在 |
|
启用为 Flash Video (FLV) 文件提供伪流服务器端支持的 FLV 模块。 |
|
|
|
启用 GunZIP 模块,该模块为不支持 |
|
启用 GZip Static 模块,该模块允许发送以 |
|
启用 Image Filter 模块,该模块可转换 JPEG、GIF、PNG 和 WebP 格式的图像。 |
|
启用 MP4 模块,该模块为 MP4 文件提供伪流服务器端支持。 |
|
启用 Perl 模块。 |
|
定义存储 Perl 模块的目录。 |
|
设置 Perl 可执行文件的路径。 |
|
启用 Random Index 模块,该模块处理以斜线字符 ( |
|
启用 RealIP 模块,该模块将客户端地址更改为在指定的头字段中发送的地址。 |
|
启用 Secure Link 模块。 |
|
启用 Slice 模块,该模块将请求拆分为子请求,每个子请求返回响应的某个范围。该模块提供大型响应的有效缓存。 |
|
启用 HTTP 服务器的 SSL 支持。 构建和运行此模块需要 OpenSSL 库。 |
|
启用 Stub Status 模块,该模块提供对基本状态信息的访问。 |
|
启用 Sub 模块,该模块通过将一个指定字符串替换为另一个字符串来修改响应。 |
|
启用 HTTP/2 模块。 |
|
启用 HTTP/3 模块。 备注 强烈建议 使用完全支持 QUIC 的 SSL 库构建 HTTP/3 模块: 使用 BoringSSL: $ ./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: $ ./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
使用 QuicTLS: $ ./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
否则,OpenSSL 库将使用一个兼容层, 该层不支持 早期数据 等功能以及会话重用。 生成的构建将 仅 与使用相同 OpenSSL 兼容层的客户端和服务器互操作。 |
|
启用 XSLT 模块,该模块使用一个或多个 XSLT 样式表转换 XML 响应。 构建和运行此模块需要 libxml2 和 libxslt 库。 |
|
启用 Google PerfTools 模块,该模块允许使用 Google Performance Tools 对 Angie 工作进程进行分析。该模块面向 Angie 开发人员。 |
禁用标准模块:
|
禁用 Access 模块,该模块允许限制对特定客户端地址的访问。 |
|
禁用 API 模块,该模块为访问有关 Web 服务器实例的基于 JSON 的信息提供 RESTful HTTP 接口。 |
|
禁用 Auth Basic 模块,该模块允许通过使用 HTTP 基本认证协议验证用户名和密码来限制对资源的访问。 |
|
禁用 AutoIndex 模块,该模块处理以斜线字符 ( |
|
禁用 Browser 模块,该模块根据请求头字段 |
|
禁用 Charset 模块,该模块将指定的字符集添加到 |
|
禁用 module 模块,该模块发出一个单像素透明 GIF。 |
|
禁用 FastCGI 模块,该模块将请求传递到 FastCGI 服务器。 |
|
禁用 Geo 模块,该模块根据客户端 IP 地址创建变量。 |
|
禁用 module 模块,该模块压缩 HTTP 服务器的响应。 构建和运行此模块需要 zlib 库。 |
|
禁用 gRPC 模块,该模块将请求传递到 gRPC 服务器。 |
|
禁用 Limit Conn 模块,该模块限制每个键的连接数,例如,单个 IP 地址的连接数。 |
|
禁用 Limit Req 模块,该模块限制每个键的请求处理速率,例如,来自单个 IP 地址的请求处理速率。 |
|
禁用 Map 模块,该模块根据其他变量的值创建变量。 |
|
禁用 Memcached 模块,该模块从 memcached 服务器获取响应。 |
|
禁用 Mirror 模块,该模块通过创建后台镜像子请求实现对原始请求的镜像。 |
|
禁用 HTTP 服务器的 Proxy 模块。 |
|
禁用 HTTP 服务器的 Prometheus 模块。 |
|
禁用 Referer 模块,该模块可以阻止具有无效 |
|
禁用 Rewrite 模块,该模块允许 HTTP 服务器重定向请求并更改其 URI。 构建和运行此模块需要 PCRE 库。 |
|
禁用 SCGI 模块,该模块将请求传递到 SCGI 服务器。 |
|
禁用 Split Clients 模块,该模块为 A/B 测试创建变量。 |
|
禁用 SSI 模块,该模块处理通过其响应中的 SSI(服务器端包含)命令。 |
|
禁用实现 hash 负载平衡方法的模块。 |
|
禁用实现 ip_hash 负载平衡方法的模块。 |
|
禁用提供上游服务器 connection caching 的模块。 |
|
禁用实现 least_conn 负载平衡方法的模块。 |
|
禁用实现 random 负载平衡方法的模块。 |
|
禁用实现 session persistence 的模块,确保客户端会话中的所有请求都传递到上游的同一后端服务器。 |
|
禁用允许在 shared memory zone 中存储上游运行时状态的模块。 |
|
禁用 UserID 模块,该模块设置适用于客户端识别的 Cookie。 |
|
禁用 uWSGI 模块,该模块将请求传递到 uWSGI 服务器。 |
Streaming#
启用附加模块:
|
|
|
启用 MQTT Preread 模块,该模块允许从 MQTT 版本 3.1.1 和 5.0 的 |
|
启用 RDP Preread 模块,该模块允许从 RDP 会话中提取 Cookie。 |
|
启用 RealIP 模块,该模块将客户端地址更改为在 PROXY 协议头中发送的地址。 |
|
启用流服务器的 SSL 支持。 构建和运行此模块需要 OpenSSL 库。 |
|
启用 SSL Preread 模块,该模块允许在不终止 SSL/TLS 的情况下从 ClientHello 消息中提取信息。 |
禁用标准模块:
|
禁用根据客户端 IP 地址创建变量值的 Geo 模块。 |
|
禁用限制每个键的连接数模块,例如,限制来自单个 IP 地址的连接数的 Limit Conn 模块。 |
|
禁用根据其他变量值创建变量的 Map 模块。 |
|
禁用向客户端发送指定值然后关闭连接的 Return 模块。 |
|
禁用设置变量值的 Set 模块。 |
|
禁用为 A/B 测试创建变量的 Split Clients 模块。 |
|
禁用实现 hash 负载均衡方法的模块。 |
|
禁用实现 least_conn 负载均衡方法的模块。 |
|
禁用实现 random 负载均衡方法的模块。 |
|
禁用允许在 shared memory zone 中存储上游运行时状态的模块。 |
邮件#
启用附加模块:
禁用标准模块:
其他选项#
|
在指定路径启用外部模块。 |
|
在指定路径启用外部动态模块。 |
|
启用动态模块兼容性;启用后,Angie 可以加载和使用为相同 Angie 版本构建的动态模块,即使这些模块是使用不同选项构建的。 |
|
设置 C 编译器的名称。 |
|
设置 C 预处理器的名称。 |
|
设置将添加到 |
|
设置链接期间将使用的附加参数。在 FreeBSD 下使用系统 PCRE 库时,应指定 |
|
启用针对特定 CPU 优化的构建: |
示例#
简单的 HTTPS 启用构建:此基本配置使用 SSL/TLS 启用 HTTPS 支持,配备必要的依赖项(用于正则表达式的 PCRE、用于压缩的 zlib 和用于 SSL/TLS 的 OpenSSL):
$ ./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 进行性能优化;线程池也被启用,以高效处理高负载:
$ ./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 服务的负载均衡器:
$ ./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 代理优化:
$ ./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 \ # 启用 HTTPS 的 SSL 模块
--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 模块以进行缓存管理