从源代码构建 Angie#

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

  1. 我们的网站 下载 .tar.gz 归档文件:

    $ curl -O https://download.angie.software/files/angie-1.10.3.tar.gz
    
  2. 解压归档文件并导航到源代码目录:

    $ tar -xpf angie-1.10.3.tar.gz
    $ cd angie-1.10.3
    
  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 模块,该模块 提供 RESTful HTTP 接口,用于访问有关 Web 服务器实例的基于 JSON 的信息。

--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

禁用构建 模块, 该模块发出单像素透明 GIF。

--without-http_fastcgi_module

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

--without-http_geo_module

禁用构建 Geo 模块,该 模块创建的变量值取决于客户端 IP 地址。

--without-http_gzip_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

禁用构建提供到上游服务器的 连接缓存 的模块。

--without-http_upstream_least_conn_module

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

--without-http_upstream_random_module

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

--without-http_upstream_sticky_module

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

--without-http_upstream_zone_module

禁用构建允许在 共享内存区域 中存储上游运行时状态的模块。

--without-http_userid_module

禁用构建 UserID 模块, 该模块设置适合客户端标识的 cookie。

--without-http_uwsgi_module

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

Stream 模块#

启用附加模块:

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

--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.0 版本的 CONNECT 数据包中提取客户端 ID 和用户名。

--with-stream_rdp_preread_module

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

--with-stream_realip_module

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

--with-stream_ssl_module

为 Stream 服务器启用 SSL 支持。

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

--with-stream_ssl_preread_module

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

禁用标准模块:

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

--without-stream_geo_module

禁用 Geo 模块, 该模块根据客户端 IP 地址创建具有不同值的变量。

--without-stream_limit_conn_module

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

--without-stream_map_module

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

--without-stream_return_module

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

--without-stream_set_module

禁用 Set 模块, 该模块为变量设置值。

--without-stream_split_clients_module

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

--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

禁用在 共享内存区 中存储上游运行时状态的模块。

Mail#

启用附加模块:

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

--with-mail_ssl_module

为 Mail 服务器启用 SSL 支持。

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

禁用标准模块:

* - --without-mail_imap_module - 在 Mail 服务器中禁用 IMAP 协议。#

--without-mail_pop3_module

在 Mail 服务器中禁用 POP3 协议。

--without-mail_smtp_module

在 Mail 服务器中禁用 SMTP 协议。

其他选项#

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

--add-module=path

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

--add-dynamic-module=path

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

--with-compat

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

--with-cc=path

设置构建期间使用的编译器。

--with-cpp=path

设置构建期间使用的预处理器。

--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

启用针对以下处理器之一优化的构建: pentiumpentiumpropentium3pentium4athlonopteronsparc32sparc64ppc64

示例#

简单的启用 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 模块以进行缓存管理