从源代码构建 Angie#

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

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

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

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

    在运行 ./configure 之前,浏览并设置 build options

    $ ./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

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

<prefix>/modules

--conf-path=path

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

<prefix>/conf/angie.conf

--error-log-path=path

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

<prefix>/logs/error.log

--pid-path=path

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

<prefix>/logs/angie.pid

--lock-path=path

设置 angie.lock 锁文件的名称。安装后,可以在 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's ./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

在 HTTP 和流模块中启用 server-sideclient-side NTLS 支持 (server-side, client-side),当与启用 NTLS 的 SSL 库链接时。

--with-zlib=path

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

该库对于 GZip 模块是 必需的

--with-zlib-opt=parameters

设置 zlib 的附加构建选项。

--with-zlib-asm=cpu

启用以汇编源构建 zlib,这些源针对以下 CPU 之一进行了优化:pentiumpentiumpro

启用和禁用模块#

您可以禁用默认包含的模块,或者启用可用但默认禁用的模块。

HTTP#

启用附加模块:

--with-http_acme_module

启用支持 ACME 协议的 ACME 模块。

--with-http_addition_module

启用在响应之前和之后添加文本的 Addition 模块。

--with-http_auth_request_module

启用根据子请求结果实现客户端授权的 Auth Request 模块。

--with-http_dav_module

启用通过 WebDAV 协议提供文件管理自动化的 DAV 模块。

--with-http_degradation_module

启用允许为某些位置返回 HTTP 状态码 204 或 444 的降级模块。

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

--with-http_flv_module

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

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

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

--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 库构建 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"

否则,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_proxy_module

禁用 HTTP 服务器的 Proxy 模块。

--without-http_prometheus_module

禁用 HTTP 服务器的 Prometheus 模块。

--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_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 模块以进行缓存管理