从源代码构建 Angie#

我们建议从官方预构建的 软件包 安装 Angie。 但是,如果您仍然需要自己的构建:

  1. 我们的网站 下载 .tar.gz 存档:

    $ curl -O https://download.angie.software/files/angie-1.10.1.tar.gz
    
  2. 解压源代码并浏览到源代码目录:

    $ tar -xpf angie-1.10.1.tar.gz
    $ cd angie-1.10.1
    
  3. 为了准备构建,请使用 ./configure 脚本来确定构建发生的操作系统的具体特性,特别是 Angie 可以用来处理连接的方法。成功运行后,脚本会创建一个 Makefile

    在运行 ./configure 之前,浏览并设置所需的 构建选项

    $ ./configure <OPTIONS>
    
  4. Makefile 准备好后,构建并安装 Angie:

    $ make
    $ make install
    

构建选项#

通用#

选项

描述

默认

--help

打印帮助信息。

--user=name

设置一个非特权用户的名称,其凭据将由工作进程使用。安装后,可以在 angie.conf 配置文件中使用 user 指令随时更改名称。

nobody

--group=name

设置一个组的名称,其凭据将由工作进程使用。安装后,可以在 angie.conf 配置文件中使用 user 指令随时更改名称。

--user 设置

--build=name

设置构建的可选名称。

--builddir=path

设置构建目录。

objs

--feature-cache=path

指定缓存构建工件的目录。

如果设置时没有路径,则使用 --builddir 设置

路径#

选项

描述

默认

--prefix=path

定义存储服务器文件的目录。此目录也将用于 ./configure 设置的所有相对路径(除库源路径外)以及 angie.conf 配置文件中。

/usr/local/angie

--sbin-path=path

设置 Angie 可执行文件的名称。此名称仅在安装期间使用。

<prefix>/sbin/angie

--modules-path=path

定义动态模块的安装目录。

<prefix>/modules

--conf-path=path

设置 angie.conf 配置文件 的名称。如有需要,可以使用 -c 命令行选项 随时启动 Angie 并使用其他配置文件。

<prefix>/conf/angie.conf

--error-log-path=path

设置主要错误、警告和诊断日志文件的名称。安装后,可以在 angie.conf 配置文件中使用 error_log 指令随时更改文件名。

<prefix>/logs/error.log

--pid-path=path

设置 angie.pid 文件的名称,该文件将存储主进程的进程 ID。安装后,可以在 angie.conf 配置文件中使用 pid 指令随时更改文件名。

<prefix>/logs/angie.pid

--lock-path=path

设置锁文件名称的前缀。安装后,可以在 angie.conf 配置文件中使用 lock_file 指令随时更改值。

<prefix>/logs/angie.lock

--http-acme-client-path=path

设置目录以存储为定义了 acme 指令的 server 块的证书和密钥。

<prefix>/acme_client

--http-log-path=path

设置 HTTP 服务器的主要请求日志文件的名称。安装后,可以在 angie.conf 配置文件中使用 access_log 指令随时更改文件名。

<prefix>/logs/access.log

--http-client-body-temp-path=path

定义用于存储临时文件的目录,这些文件保存客户端请求体。安装后,可以在 angie.conf 配置文件中使用 client_body_temp_path 指令随时更改目录。

<prefix>/client_body_temp

--http-proxy-temp-path=path

定义用于存储从代理服务器接收的数据的临时文件的目录。安装后,可以在 angie.conf 配置文件中使用 proxy_temp_path 指令随时更改目录。

<prefix>/proxy_temp

--http-fastcgi-temp-path=path

定义用于存储从 FastCGI 服务器接收的数据的临时文件的目录。安装后,可以在 angie.conf 配置文件中使用 fastcgi_temp_path 指令随时更改目录。

<prefix>/fastcgi_temp

--http-uwsgi-temp-path=path

定义用于存储从 uWSGI 服务器接收的数据的临时文件的目录。安装后,可以在 angie.conf 配置文件中使用 uwsgi_temp_path 指令随时更改目录。

<prefix>/uwsgi_temp

--http-scgi-temp-path=path

定义用于存储从 SCGI 服务器接收的数据的临时文件的目录。安装后,可以在 angie.conf 配置文件中使用 scgi_temp_path 指令随时更改目录。

<prefix>/scgi_temp

功能和依赖项#

--with-select_module, --without-select_module

启用或禁用构建一个允许服务器使用 select() 方法的模块。如果平台似乎不支持更合适的方法,例如 kqueueepoll/dev/poll,则该模块会自动构建。

--with-poll_module, --without-poll_module

启用或禁用构建一个允许服务器使用 poll() 方法的模块。如果平台似乎不支持更合适的方法,例如 kqueueepoll/dev/poll,则该模块会自动构建。

--with-threads

启用使用 线程池

--with-file-aio

启用在 FreeBSD 和 Linux 上使用 异步文件I/O (AIO)。

--with-debug

启用 调试日志

--without-http-cache

禁用 HTTP 缓存。

--with-pcre, --with-pcre=path

启用使用 PCRE 库。

可选参数设置 PCRE 库源的路径。需要从 PCRE 站点下载并解压库分发。其余部分由 Angie 的 ./configuremake 命令完成。

该库对于 location 指令中的正则表达式支持以及 Rewrite 模块是 必需的

--with-pcre-opt=parameters

设置 PCRE 的附加构建参数。

--with-pcre-jit

使用 JIT 编译支持构建 PCRE 库(pcre_jit 指令)。

--without-pcre

禁用使用 PCRE 库。

--without-pcre2

禁用使用 PCRE2 库而不是原始 PCRE 库。

--with-libatomic, --with-libatomic=path

启用使用 libatomic_ops 库构建。可选参数设置库源的路径。

--with-openssl=path

启用静态构建并设置 OpenSSL 库源的路径。

--with-openssl-opt=parameters

设置 OpenSSL 的附加构建参数。

--with-ntls

在构建支持 NTLS 的 SSL 库时,启用 HTTP 模块(服务器端客户端)和流模块(服务器端客户端)中的 NTLS 支持。

--with-zlib=path

设置 zlib 库源的路径。库分发(版本 1.1.3 — 1.2.11)需要从 zlib 站点 下载并解压。其余部分由 Angie 的 ./configuremake 命令完成。

该库对于 GZip 模块是 必需的

--with-zlib-opt=parameters

设置 zlib 的附加构建参数。

--with-zlib-asm=cpu

启用使用为以下处理器之一优化的汇编优化来构建 zlibpentiumpentiumpro

启用和禁用模块#

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

HTTP#

启用附加模块:

--with-http_acme_module

启用构建 ACME 模块,该模块启用 ACME 协议。

--with-http_addition_module

启用构建 Addition 模块,该模块允许在响应前后添加文本。

--with-http_auth_request_module

启用构建 Auth Request 模块,该模块提供基于子请求结果的客户端授权能力。

--with-http_dav_module

启用构建 DAV 模块,该模块旨在通过 WebDAV 协议在服务器上自动化文件管理任务。

--with-http_degradation_module

启用构建降级模块,该模块允许为某些 location 块返回 HTTP 状态码 204 或 444。

此模块只能在 sbrk(0) 显示进程实际分配的内存量的情况下使用。换句话说,该模块默认在 FreeBSD 7.0 版本之前工作。从 7.0 版本开始,它只有在设置 MALLOC_OPTIONS=Dm 时才能工作。在 Linux 上它不起作用。

--with-http_flv_module

启用构建 FLV 模块,该模块为 Flash Video (FLV) 文件提供服务器端伪流支持。

--with-http_geoip_module, --with-http_geoip_module=dynamic

启用构建 GeoIP 模块,该模块创建的变量值基于客户端 IP 地址和现成的 MaxMind 数据库确定。

--with-http_gunzip_module

启用构建 GunZIP 模块,该模块允许为不支持 gzip 压缩方法的客户端解压缩带有 Content-Encoding: gzip 的响应。

--with-http_gzip_static_module

启用构建 Gzip Static 模块,该模块允许提供具有相同名称和 .gz 扩展名的预压缩文件,而不是常规文件。

--with-http_image_filter_module, --with-http_image_filter_module=dynamic

启用构建 Image Filter 模块,该模块允许转换 JPEG、GIF、PNG 和 WebP 格式的图像。

--with-http_mp4_module

启用构建 MP4 模块,该模块为 MP4 格式文件提供服务器端伪流支持。

--with-http_perl_module, --with-http_perl_module=dynamic

启用构建 Perl 模块。

--with-perl_modules_path=path

设置 Perl 模块文件所在的目录。

--with-perl=path

设置 Perl 可执行文件的名称。

--with-http_random_index_module

启用构建 Random Index 模块,该模块处理以斜杠 (/) 结尾的请求,并返回一个随机文件作为目录的索引文件。

--with-http_realip_module

启用构建 RealIP 模块,该模块允许将客户端地址更改为在指定头字段中传递的地址。

--with-http_secure_link_module

启用构建 Secure Link 模块。

--with-http_slice_module

启用构建 Slice 模块,该模块允许将请求拆分为子请求,每个子请求返回响应的特定范围。该模块提供大型响应的高效缓存。

--with-http_ssl_module

为 HTTP 服务器启用 SSL 支持。

此模块 需要 OpenSSL 库。

--with-http_stub_status_module

启用构建 Stub Status 模块,该模块提供对基本服务器状态信息的访问。

--with-http_sub_module

启用构建 Sub 模块,该模块允许将响应中一个指定的字符串修改为另一个。

--with-http_v2_module

启用 HTTP/2 模块。

--with-http_v3_module

启用 HTTP/3 模块。

备注

对于构建,强烈建议 使用支持 QUIC 协议的 SSL 库:

使用 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"

如果不使用这些库,将使用 OpenSSL 库的兼容模式,在该模式下不支持 早期数据 发送,并且缺少其他功能,如会话重用。这样的构建将 只能 与使用相同模式的 OpenSSL 的客户端和服务器交互。

--with-http_xslt_module, --with-http_xslt_module=dynamic

启用构建 XSLT 模块,该模块允许使用 XSLT 样式表转换 XML 响应。

此模块需要 libxml2libxslt 库。

--with-google_perftools_module

启用构建 Google PerfTools 模块,该模块提供使用 Google Performance Tools 对 Angie 工作进程进行分析的支持。该模块主要面向 Angie 开发人员。

禁用标准模块:

--without-http

禁用 HTTP 服务器。

--without-http_access_module

禁用 Access 模块,该模块允许限制对特定客户端地址的访问。

--without-http_api_module

禁用 API 模块,该模块为访问有关 Web 服务器实例的基于 JSON 的信息提供 RESTful HTTP 接口。

--without-http_auth_basic_module

禁用 Auth Basic 模块,该模块允许通过使用 HTTP 基本认证协议验证用户名和密码来限制对资源的访问。

--without-http_autoindex_module

禁用 AutoIndex 模块,该模块处理以斜线字符 (/) 结尾的请求,并在 Index 模块找不到索引文件的情况下生成目录列表。

--without-http_browser_module

禁用 Browser 模块,该模块根据请求头字段 User-Agent 的值创建变量。

--without-http_charset_module

禁用 Charset 模块,该模块将指定的字符集添加到 Content-Type 响应头字段,并且可以将数据从一种字符集转换为另一种字符集。

--without-http_empty_gif_module

禁用 module 模块,该模块发出一个单像素透明 GIF。

--without-http_fastcgi_module

禁用 FastCGI 模块,该模块将请求传递到 FastCGI 服务器。

--without-http_geo_module

禁用 Geo 模块,该模块根据客户端 IP 地址创建变量。

--without-http_gzip_module

禁用 module 模块,该模块压缩 HTTP 服务器的响应。

构建和运行此模块需要 zlib 库。

--without-http_grpc_module

禁用 gRPC 模块,该模块将请求传递到 gRPC 服务器。

--without-http_limit_conn_module

禁用 Limit Conn 模块,该模块限制每个键的连接数,例如,单个 IP 地址的连接数。

--without-http_limit_req_module

禁用 Limit Req 模块,该模块限制每个键的请求处理速率,例如,来自单个 IP 地址的请求处理速率。

--without-http_map_module

禁用 Map 模块,该模块根据其他变量的值创建变量。

--without-http_memcached_module

禁用 Memcached 模块,该模块从 memcached 服务器获取响应。

--without-http_mirror_module

禁用 Mirror 模块,该模块通过创建后台镜像子请求实现对原始请求的镜像。

--without-http_prometheus_module

禁用 HTTP 服务器的 Prometheus 模块。

--without-http_proxy_module

禁用 HTTP 服务器的 Proxy 模块。

--without-http_referer_module

禁用 Referer 模块,该模块可以阻止具有无效 Referer 头字段值的请求访问站点。

--without-http_rewrite_module

禁用 Rewrite 模块,该模块允许 HTTP 服务器重定向请求并更改其 URI。

构建和运行此模块需要 PCRE 库。

--without-http_scgi_module

禁用 SCGI 模块,该模块将请求传递到 SCGI 服务器。

--without-http_split_clients_module

禁用 Split Clients 模块,该模块为 A/B 测试创建变量。

--without-http_ssi_module

禁用 SSI 模块,该模块处理通过其响应中的 SSI(服务器端包含)命令。

--without-http_upstream_hash_module

禁用实现 hash 负载平衡方法的模块。

--without-http_upstream_ip_hash_module

禁用实现 ip_hash 负载平衡方法的模块。

--without-http_upstream_keepalive_module

禁用提供上游服务器 connection caching 的模块。

--without-http_upstream_least_conn_module

禁用实现 least_conn 负载平衡方法的模块。

--without-http_upstream_random_module

禁用实现 random 负载平衡方法的模块。

--without-http_upstream_sticky_module

禁用实现 session persistence 的模块,确保客户端会话中的所有请求都传递到上游的同一后端服务器。

--without-http_upstream_zone_module

禁用允许在 shared memory zone 中存储上游运行时状态的模块。

--without-http_userid_module

禁用 UserID 模块,该模块设置适用于客户端识别的 Cookie。

--without-http_uwsgi_module

禁用 uWSGI 模块,该模块将请求传递到 uWSGI 服务器。

Streaming#

启用附加模块:

* - --with-stream, --with-stream=dynamic - 启用用于通用 TCP/UDP 代理和负载平衡的核心 Stream 模块。#

--with-stream_acme_module

启用构建 ACME 模块,该模块启用 ACME 协议。

--with-stream_geoip_module, --with-stream_geoip_module=dynamic

启用 GeoIP 模块,该模块根据客户端 IP 地址和预编译的 MaxMind 数据库创建变量。

--with-stream_mqtt_preread_module

启用 MQTT Preread 模块,该模块允许从 MQTT 版本 3.1.15.0CONNECT 数据包中提取客户端 ID 和用户名。

--with-stream_rdp_preread_module

启用 RDP Preread 模块,该模块允许从 RDP 会话中提取 Cookie。

--with-stream_realip_module

启用 RealIP 模块,该模块将客户端地址更改为在 PROXY 协议头中发送的地址。

--with-stream_ssl_module

启用流服务器的 SSL 支持。

构建和运行此模块需要 OpenSSL 库。

--with-stream_ssl_preread_module

启用 SSL Preread 模块,该模块允许在不终止 SSL/TLS 的情况下从 ClientHello 消息中提取信息。

禁用标准模块:

* - --without-stream_access_module - 禁用允许限制访问特定客户端地址的 Access 模块。#

--without-stream_geo_module

禁用根据客户端 IP 地址创建变量值的 Geo 模块。

--without-stream_limit_conn_module

禁用限制每个键的连接数模块,例如,限制来自单个 IP 地址的连接数的 Limit Conn 模块。

--without-stream_map_module

禁用根据其他变量值创建变量的 Map 模块。

--without-stream_return_module

禁用向客户端发送指定值然后关闭连接的 Return 模块。

--without-stream_set_module

禁用设置变量值的 Set 模块。

--without-stream_split_clients_module

禁用为 A/B 测试创建变量的 Split Clients 模块。

--without-stream_upstream_hash_module

禁用实现 hash 负载均衡方法的模块。

--without-stream_upstream_least_conn_module

禁用实现 least_conn 负载均衡方法的模块。

--without-stream_upstream_random_module

禁用实现 random 负载均衡方法的模块。

--without-stream_upstream_zone_module

禁用允许在 shared memory zone 中存储上游运行时状态的模块。

邮件#

启用附加模块:

* - --with-mail, --with-mail=dynamic - 启用支持 POP3、IMAP4 和 SMTP 的核心 Mail 模块。#

--with-mail_ssl_module

启用邮件服务器的 SSL 支持。

构建和运行此模块需要 OpenSSL 库。

禁用标准模块:

* - --without-mail_imap_module - 禁用邮件服务器中的 IMAP 协议。#

--without-mail_pop3_module

禁用邮件服务器中的 POP3 协议。

--without-mail_smtp_module

禁用邮件服务器中的 SMTP 协议。

其他选项#

* - --with-cpp_test_module - 启用 CPP 测试模块。它主要用于开发和测试目的,不适合生产环境使用。#

--add-module=path

在指定路径启用外部模块。

--add-dynamic-module=path

在指定路径启用外部动态模块。

--with-compat

启用动态模块兼容性;启用后,Angie 可以加载和使用为相同 Angie 版本构建的动态模块,即使这些模块是使用不同选项构建的。

--with-cc=path

设置 C 编译器的名称。

--with-cpp=path

设置 C 预处理器的名称。

--with-cc-opt=parameters

设置将添加到 CFLAGS 变量的附加参数。在 FreeBSD 下使用系统 PCRE 库时,应指定 --with-cc-opt="-I /usr/local/include"。如果需要增加 select() 支持的文件数量,也可以在此处指定,例如 --with-cc-opt="-D FD_SETSIZE=2048"

--with-ld-opt=parameters

设置链接期间将使用的附加参数。在 FreeBSD 下使用系统 PCRE 库时,应指定 --with-ld-opt="-L /usr/local/lib"

--with-cpu-opt=cpu

启用针对特定 CPU 优化的构建:pentium, 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 模块以进行缓存管理