从源代码构建 Angie#
我们建议从官方预构建的 软件包 安装 Angie。 但是,如果您仍然需要自己构建:
从 我们的网站 下载
.tar.gz归档文件:$ curl -O https://download.angie.software/files/angie-1.10.3.tar.gz
解压归档文件并导航到源代码目录:
$ tar -xpf angie-1.10.3.tar.gz $ cd angie-1.10.3
要准备构建,请使用 ./configure 脚本, 该脚本确定构建所在操作系统的特定特征, 特别是 Angie 可以用来处理连接的方法。 成功运行后,该脚本会创建一个
Makefile。在运行 ./configure 之前,请查看并设置所需的 构建选项:
$ ./configure <OPTIONS>
当
Makefile准备就绪后,构建并安装 Angie:$ make $ make install
构建选项#
常规#
路径#
选项 | 描述 | 默认值 |
|---|---|---|
| 定义将存储服务器文件的目录。此目录也将用于
./configure 设置的所有相对路径(库源代码路径除外)
以及 |
|
| 设置 Angie 可执行文件的名称。此名称仅在安装期间使用。 |
|
| 定义将安装动态模块的目录。 |
|
| 设置 |
|
| 设置主要错误、警告和诊断日志文件的名称。
安装后,可以随时在 |
|
| 设置 |
|
| 设置锁文件名的前缀。安装后,可以随时在 |
|
| 设置用于存储已定义 acme 指令的 |
|
| 设置 HTTP 服务器的主要请求日志文件的名称。安装后,
可以随时在 |
|
| 定义用于存储保存客户端请求正文的临时文件的目录。安装后,
可以随时在 |
|
| 定义用于存储从代理服务器接收的数据的临时文件的目录。安装后,
可以随时在 |
|
| 定义用于存储从 FastCGI 服务器接收的数据的临时文件的目录。
安装后,可以随时在 |
|
| 定义用于存储从 uWSGI 服务器接收的数据的临时文件的目录。
安装后,可以随时在 |
|
| 定义用于存储从 SCGI 服务器接收的数据的临时文件的目录。
安装后,可以随时在 |
|
功能和依赖项#
| 启用或禁用构建一个允许服务器使用 |
| 启用或禁用构建一个允许服务器使用 |
| 启用使用 线程池。 |
| 启用在 FreeBSD 和 Linux 上使用 异步文件I/O (AIO)。 |
| 启用 调试日志。 |
| 禁用 HTTP 缓存。 |
| 启用使用 PCRE 库。 可选参数设置 PCRE 库源的路径。需要从 PCRE 站点下载并解压库分发。其余部分由 Angie 的 ./configure 和 make 命令完成。 该库对于 |
| 设置 PCRE 的附加构建参数。 |
| 使用 JIT 编译支持构建 PCRE 库(pcre_jit 指令)。 |
| 禁用使用 PCRE 库。 |
| 禁用使用 PCRE2 库而不是原始 PCRE 库。 |
| 启用使用 libatomic_ops 库构建。可选参数设置库源的路径。 |
| 启用静态构建并设置 OpenSSL 库源的路径。 |
| 设置 OpenSSL 的附加构建参数。 |
| 在构建支持 NTLS 的 SSL 库时,启用 HTTP 模块(服务器端,客户端)和流模块(服务器端,客户端)中的 NTLS 支持。 |
| 设置 zlib 库源的路径。库分发(版本 1.1.3 — 1.2.11)需要从 zlib 站点 下载并解压。其余部分由 Angie 的 ./configure 和 make 命令完成。 该库对于 GZip 模块是 必需的。 |
| 设置 zlib 的附加构建参数。 |
| 启用使用为以下处理器之一优化的汇编优化来构建 zlib: |
启用和禁用模块#
您可以禁用默认启用的模块,或启用默认可用但已禁用的模块。 启用附加模块: 启用构建 ACME 模块,该模块启用 ACME 协议。 启用构建 Addition 模块,该模块允许在响应前后添加文本。 启用构建 Auth Request 模块,该模块提供基于子请求结果的客户端授权能力。 启用构建 DAV 模块,该模块旨在通过 WebDAV 协议在服务器上自动化文件管理任务。 启用构建降级模块,该模块允许为某些 此模块只能在 启用构建 FLV 模块,该模块为 Flash Video (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 库: 使用 BoringSSL 构建: 使用 LibreSSL 构建: 使用 QuicTLS 构建: 如果不使用这些库,将使用 OpenSSL 库的兼容模式,在该模式下不支持 早期数据 发送,并且缺少其他功能,如会话重用。这样的构建将 只能 与使用相同模式的 OpenSSL 的客户端和服务器交互。 启用构建 XSLT 模块,该模块允许使用 XSLT 样式表转换
XML 响应。 此模块**需要** libxml2 和 libxslt 库。 启用构建 Google PerfTools 模块,该模块支持
使用 Google Performance
Tools 对 Angie 工作进程进行性能分析。该模块面向
Angie 开发人员。 禁用标准模块: 禁用 HTTP 服务器。 禁用构建 Access 模块,
该模块允许限制对特定客户端地址的访问。 禁用构建 API 模块,该模块
提供 RESTful HTTP 接口,用于访问有关 Web 服务器实例的基于 JSON 的信息。 禁用构建 Auth Basic
模块,该模块允许通过使用 HTTP 基本身份验证协议验证用户名和密码来限制对资源的访问。 禁用构建 AutoIndex
模块,该模块处理以斜杠字符
( 禁用构建 Browser
模块,该模块创建的变量值取决于
禁用构建 Charset
模块,该模块将指定的字符集添加到 禁用构建 模块,
该模块发出单像素透明 GIF。 禁用构建 FastCGI
模块,该模块将请求传递给 FastCGI 服务器。 禁用构建 Geo 模块,该
模块创建的变量值取决于客户端 IP 地址。 禁用构建 模块,该
模块压缩 HTTP 服务器响应。 此模块**需要** zlib 库。 禁用构建 gRPC 模块,该模块
将请求传递给 gRPC 服务器。 禁用构建 Limit Conn
模块,该模块限制每个键的连接数,例如,
来自单个 IP 地址的连接数。 禁用构建 Limit Req
模块,该模块限制每个键的请求处理速率,例如,
来自单个 IP 地址的请求处理速率。 禁用构建 Map 模块,该
模块创建的变量值取决于其他变量的值。 禁用构建 Memcached
模块,该模块从 memcached 服务器获取响应。 禁用构建 Mirror 模块,
该模块通过创建后台镜像子请求来实现原始请求的镜像。 禁用构建 HTTP 服务器的 Prometheus
模块。 禁用构建 HTTP 服务器的 Proxy 模块。 禁用构建 Referer
模块,该模块可以阻止
禁用构建 Rewrite
模块,该模块允许 HTTP 服务器重定向请求并更改其
URI。 此模块**需要** PCRE 库。 禁用构建 SCGI 模块,该模块
将请求传递给 SCGI 服务器。 禁用构建 Split Clients 模块,该模块
为 A/B 测试创建变量。 禁用构建 SSI 模块,该模块
处理通过它的响应中的 SSI(服务器端包含)命令。 禁用构建实现 hash 负载
均衡方法的模块。 禁用构建实现 ip_hash 负载
均衡方法的模块。 禁用构建提供到上游服务器的 连接缓存 的模块。 禁用构建实现 least_conn
负载均衡方法的模块。 禁用构建实现 random 负载
均衡方法的模块。 禁用构建实现 会话持久性 的模块,确保客户端会话中的所有请求都传递到
上游中的同一服务器。 禁用构建允许在 共享内存区域 中存储上游运行时状态的模块。 禁用构建 UserID 模块,
该模块设置适合客户端标识的 cookie。 禁用构建 uWSGI 模块,
该模块将请求传递给 uWSGI 服务器。 启用附加模块: 启用构建 ACME 模块,
该模块启用 ACME 协议。 启用 MQTT Preread 模块,该模块允许
从 MQTT 3.1.1
和 5.0
版本的 启用 RDP Preread 模块,该模块允许
从 RDP 会话中提取 cookie。 启用 RealIP 模块,
该模块将客户端地址更改为 PROXY 协议头中发送的地址。 为 Stream 服务器启用 SSL 支持。 构建和运行此模块**需要** OpenSSL 库。 启用 SSL Preread 模块,该模块允许
在不终止 SSL/TLS 的情况下从 ClientHello
消息中提取信息。 禁用标准模块: 禁用 Geo 模块,
该模块根据客户端 IP 地址创建具有不同值的变量。 禁用 Limit Conn 模块,
该模块限制每个键的连接数,例如来自单个 IP 地址的连接数。 禁用 Map 模块,
该模块根据其他变量的值创建变量。 禁用 Return 模块,
该模块向客户端发送指定的值,然后关闭连接。 禁用 Set 模块,
该模块为变量设置值。 禁用 Split Clients 模块,
该模块为 A/B 测试创建变量。 禁用实现 hash 负载均衡方法的模块。 禁用实现 least_conn 负载均衡方法的模块。 禁用实现 random 负载均衡方法的模块。 禁用在 共享内存区 中存储上游运行时状态的模块。 启用附加模块: 为 Mail 服务器启用 SSL 支持。 构建和运行此模块**需要** OpenSSL 库。 禁用标准模块: 启用在指定路径构建外部模块。 启用在指定路径构建外部动态模块。 启用动态模块兼容模式。启用后,Angie 可以加载和使用
为相同 Angie 版本构建的动态模块,即使这些模块是使用不同选项构建的。 设置构建期间使用的编译器。 设置构建期间使用的预处理器。 设置将添加到 设置链接期间使用的附加参数。在 FreeBSD 下使用系统 PCRE 库时,
应指定 启用针对以下处理器之一优化的构建:
HTTP#
--with-http_acme_module--with-http_addition_module--with-http_auth_request_module--with-http_dav_module--with-http_degradation_modulelocation 块返回 HTTP 状态码 204 或 444。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_modulegzip 压缩方法的客户端解压缩带有 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--without-http_access_module--without-http_api_module--without-http_auth_basic_module--without-http_autoindex_module/) 结尾的请求,并在 Index 模块找不到索引文件时生成目录列表。--without-http_browser_moduleUser-Agent 请求头字段的值。--without-http_charset_moduleContent-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_prometheus_module--without-http_proxy_module--without-http_referer_moduleReferer 头字段值无效的请求访问站点。--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_moduleStream 模块#
--with-stream, --with-stream=dynamic
- 启用核心 Stream 模块,
用于通用 TCP/UDP 代理和负载均衡。#--with-stream_acme_module--with-stream_geoip_module, --with-stream_geoip_module=dynamic--with-stream_mqtt_preread_moduleCONNECT 数据包中提取客户端 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_moduleMail#
--with-mail, --with-mail=dynamic
- 启用核心 Mail 模块,
该模块支持 POP3、IMAP4 和 SMTP。#--with-mail_ssl_module其他选项#
--with-cpp_test_module
- 启用 CPP Test 模块。它主要用于开发和测试目的,
不适用于生产环境。#--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 \ # 启用 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 模块以进行缓存管理