从源代码构建 Angie#
我们建议从官方预构建的 软件包 安装 Angie。 但是,如果您仍然需要自己的构建:
从 我们的网站 下载
.tar.gz
存档:$ curl -O https://download.angie.software/files/angie-1.8.2.tar.gz
解压源代码并浏览到源代码目录:
$ tar -xpf angie-1.8.2.tar.gz $ cd angie-1.8.2
为了准备构建,请使用 ./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 之一进行了优化: |
启用和禁用模块#
您可以禁用默认包含的模块,或者启用可用但默认禁用的模块。 启用附加模块: 启用支持 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: 使用 LibreSSL: 使用 QuicTLS: 否则,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 服务器。 启用附加模块: 启用 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 中存储上游运行时状态的模块。 启用附加模块: 启用邮件服务器的 SSL 支持。 构建和运行此模块需要 OpenSSL 库。 禁用标准模块: 在指定路径启用外部模块。 在指定路径启用外部动态模块。 启用动态模块兼容性;启用后,Angie 可以加载和使用为相同 Angie 版本构建的动态模块,即使这些模块是使用不同选项构建的。 设置 C 编译器的名称。 设置 C 预处理器的名称。 设置将添加到 设置链接期间将使用的附加参数。在 FreeBSD 下使用系统 PCRE 库时,应指定 启用针对特定 CPU 优化的构建:HTTP#
--with-http_acme_module
--with-http_addition_module
--with-http_auth_request_module
--with-http_dav_module
--with-http_degradation_module
sbrk(0)
显示进程实际分配的内存量的情况下使用。换句话说,该模块默认在 FreeBSD 版本 7.0 之前工作。从版本 7.0 开始,它仅在设置 MALLOC_OPTIONS=Dm
时工作。它在 Linux 上不起作用。--with-http_flv_module
--with-http_geoip_module
, --with-http_geoip_module=dynamic
--with-http_gunzip_module
gzip
编码方法的客户端解压缩带有 Content-Encoding: gzip
的响应。--with-http_gzip_static_module
.gz
文件名扩展名预压缩的文件,而不是常规文件。--with-http_image_filter_module
, --with-http_image_filter_module=dynamic
--with-http_mp4_module
--with-http_perl_module
, --with-http_perl_module=dynamic
--with-perl_modules_path=
path--with-perl=
path--with-http_random_index_module
/
) 结尾的请求,并在目录中选择一个随机文件作为索引文件。--with-http_realip_module
--with-http_secure_link_module
--with-http_slice_module
--with-http_ssl_module
--with-http_stub_status_module
--with-http_sub_module
--with-http_v2_module
--with-http_v3_module
$ ./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../boringssl/include"
--with-ld-opt="-L../boringssl/build/ssl
-L../boringssl/build/crypto"
$ ./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
$ ./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
--with-http_xslt_module
, --with-http_xslt_module=dynamic
--with-google_perftools_module
--without-http
- 禁用 HTTP 服务器。#--without-http_access_module
--without-http_api_module
--without-http_auth_basic_module
--without-http_autoindex_module
/
) 结尾的请求,并在 Index 模块找不到索引文件的情况下生成目录列表。--without-http_browser_module
User-Agent
的值创建变量。--without-http_charset_module
Content-Type
响应头字段,并且可以将数据从一种字符集转换为另一种字符集。--without-http_empty_gif_module
--without-http_fastcgi_module
--without-http_geo_module
--without-http_gzip_module
--without-http_grpc_module
--without-http_limit_conn_module
--without-http_limit_req_module
--without-http_map_module
--without-http_memcached_module
--without-http_mirror_module
--without-http_proxy_module
--without-http_prometheus_module
--without-http_referer_module
Referer
头字段值的请求访问站点。--without-http_rewrite_module
--without-http_scgi_module
--without-http_split_clients_module
--without-http_ssi_module
--without-http_upstream_hash_module
--without-http_upstream_ip_hash_module
--without-http_upstream_keepalive_module
--without-http_upstream_least_conn_module
--without-http_upstream_random_module
--without-http_upstream_sticky_module
--without-http_upstream_zone_module
--without-http_userid_module
--without-http_uwsgi_module
Streaming#
--with-stream
, --with-stream=dynamic
- 启用用于通用 TCP/UDP 代理和负载平衡的核心 Stream 模块。#--with-stream_geoip_module
, --with-stream_geoip_module=dynamic
--with-stream_mqtt_preread_module
CONNECT
数据包中提取客户端 ID 和用户名。--with-stream_rdp_preread_module
--with-stream_realip_module
--with-stream_ssl_module
--with-stream_ssl_preread_module
--without-stream_access_module
- 禁用允许限制访问特定客户端地址的 Access 模块。#--without-stream_geo_module
--without-stream_limit_conn_module
--without-stream_map_module
--without-stream_return_module
--without-stream_set_module
--without-stream_split_clients_module
--without-stream_upstream_hash_module
--without-stream_upstream_least_conn_module
--without-stream_upstream_random_module
--without-stream_upstream_zone_module
邮件#
--with-mail
, --with-mail=dynamic
- 启用支持 POP3、IMAP4 和 SMTP 的核心 Mail 模块。#--with-mail_ssl_module
其他选项#
--with-cpp_test_module
- 启用 CPP 测试模块。它主要用于开发和测试目的,不适合生产环境使用。#--add-module=
path--add-dynamic-module=
path--with-compat
--with-cc=
path--with-cpp=
path--with-cc-opt=
parametersCFLAGS
变量的附加参数。在 FreeBSD 下使用系统 PCRE 库时,应指定 --with-cc-opt="-I /usr/local/include"
。如果需要增加 select()
支持的文件数量,也可以在此处指定,例如 --with-cc-opt="-D FD_SETSIZE=2048"
。--with-ld-opt=
parameters--with-ld-opt="-L /usr/local/lib"
。--with-cpu-opt=
cpupentium
, pentiumpro
, pentium3
, pentium4
, athlon
, opteron
, sparc32
, sparc64
, ppc64
。
示例#
简单的 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 模块以进行缓存管理