从源代码构建 Nginx
构建过程使用configure
命令进行配置。它定义了系统的各个方面,包括 Nginx 允许用于连接处理的方法。最后,它会创建一个Makefile
。
configure
命令支持以下参数
-
--help
- 打印帮助信息。
-
--prefix=
path
- 定义一个目录,用于保存服务器文件。此目录还将用于
configure
设置的所有相对路径(库源路径除外)以及nginx.conf
配置文件中。默认情况下,它设置为/usr/local/nginx
目录。 -
--sbin-path=
path
- 设置 Nginx 可执行文件的名称。此名称仅在安装期间使用。默认情况下,文件名为
。prefix
/sbin/nginx -
--modules-path=
path
- 定义一个目录,用于安装 Nginx 动态模块。默认情况下,使用
目录。prefix
/modules -
--conf-path=
path
- 设置
nginx.conf
配置文件的名称。如果需要,始终可以通过在命令行参数中指定它来启动具有不同配置文件的 Nginx 。默认情况下,文件名为-c
file
。prefix
/conf/nginx.conf -
--error-log-path=
path
- 设置主要错误、警告和诊断文件的名称。安装后,始终可以使用error_log指令在
nginx.conf
配置文件中更改文件名。默认情况下,文件名为
。prefix
/logs/error.log -
--pid-path=
path
- 设置
nginx.pid
文件的名称,该文件将存储主进程的进程 ID。安装后,始终可以使用pid指令在nginx.conf
配置文件中更改文件名。默认情况下,文件名为
。prefix
/logs/nginx.pid -
--lock-path=
path
- 设置锁定文件名称的前缀。安装后,始终可以使用lock_file指令在
nginx.conf
配置文件中更改该值。默认情况下,该值为
。prefix
/logs/nginx.lock
-
--user=
name
- 设置非特权用户的名称,工作进程将使用其凭据。安装后,始终可以使用user指令在
nginx.conf
配置文件中更改该名称。默认用户名为 nobody。 -
--group=
name
- 设置组的名称,工作进程将使用其凭据。安装后,始终可以使用user指令在
nginx.conf
配置文件中更改该名称。默认情况下,组名称设置为非特权用户的名称。
-
--build=
name
- 设置可选的 Nginx 构建名称。
-
--builddir=
path
- 设置构建目录。
-
--with-select_module
--without-select_module
- 启用或禁用构建允许服务器使用
select()
方法工作的模块。如果平台似乎不支持更合适的方法(如 kqueue、epoll 或 /dev/poll),则会自动构建此模块。 -
--with-poll_module
--without-poll_module
- 启用或禁用构建允许服务器使用
poll()
方法工作的模块。如果平台似乎不支持更合适的方法(如 kqueue、epoll 或 /dev/poll),则会自动构建此模块。 -
--with-threads
- 启用使用线程池。
-
--with-file-aio
- 在 FreeBSD 和 Linux 上启用使用异步文件 I/O (AIO)。
-
--with-http_ssl_module
- 启用构建一个模块,该模块将HTTPS 协议支持添加到 HTTP 服务器。默认情况下不构建此模块。需要 OpenSSL 库来构建和运行此模块。
-
--with-http_v2_module
- 启用构建一个模块,该模块提供对HTTP/2的支持。默认情况下不构建此模块。
-
--with-http_v3_module
- 启用构建一个模块,该模块提供对HTTP/3的支持。默认情况下不构建此模块。建议使用提供 HTTP/3 支持的 SSL 库来构建和运行此模块,例如BoringSSL、LibreSSL或QuicTLS。否则,如果使用 OpenSSL 库,将使用不支持 QUIC 早期数据的 OpenSSL 兼容层。
-
--with-http_realip_module
- 启用构建ngx_http_realip_module模块,该模块将客户端地址更改为在指定标头字段中发送的地址。默认情况下不构建此模块。
-
--with-http_addition_module
- 启用构建ngx_http_addition_module模块,该模块在响应前后添加文本。默认情况下不构建此模块。
-
--with-http_xslt_module
--with-http_xslt_module=dynamic
- 启用构建ngx_http_xslt_module模块,该模块使用一个或多个 XSLT 样式表转换 XML 响应。默认情况下不构建此模块。需要libxml2和libxslt库来构建和运行此模块。
-
--with-http_image_filter_module
--with-http_image_filter_module=dynamic
- 启用构建ngx_http_image_filter_module模块,该模块转换 JPEG、GIF、PNG 和 WebP 格式的图像。默认情况下不构建此模块。
-
--with-http_geoip_module
--with-http_geoip_module=dynamic
- 启用构建ngx_http_geoip_module模块,该模块根据客户端 IP 地址和预编译的MaxMind数据库创建变量。默认情况下不构建此模块。
-
--with-http_sub_module
- 启用构建ngx_http_sub_module模块,该模块通过将一个指定的字符串替换为另一个字符串来修改响应。默认情况下不构建此模块。
-
--with-http_dav_module
- 启用构建ngx_http_dav_module模块,该模块通过 WebDAV 协议提供文件管理自动化。默认情况下不构建此模块。
-
--with-http_flv_module
- 启用构建ngx_http_flv_module模块,该模块提供对 Flash Video (FLV) 文件的伪流服务器端支持。默认情况下不构建此模块。
-
--with-http_mp4_module
- 启用构建ngx_http_mp4_module模块,该模块提供对 MP4 文件的伪流服务器端支持。默认情况下不构建此模块。
-
--with-http_gunzip_module
- 启用构建ngx_http_gunzip_module模块,该模块为不支持“gzip”编码方法的客户端解压缩“
Content-Encoding: gzip
”的响应。默认情况下不构建此模块。 -
--with-http_gzip_static_module
- 启用构建ngx_http_gzip_static_module模块,该模块启用发送具有“
.gz
”文件名扩展名的预压缩文件,而不是常规文件。默认情况下不构建此模块。 -
--with-http_auth_request_module
- 启用构建ngx_http_auth_request_module模块,该模块基于子请求的结果实现客户端授权。默认情况下不构建此模块。
-
--with-http_random_index_module
- 启用构建ngx_http_random_index_module模块,该模块处理以斜杠字符('
/
')结尾的请求,并在目录中选择一个随机文件作为索引文件提供服务。默认情况下不构建此模块。 -
--with-http_secure_link_module
- 启用构建ngx_http_secure_link_module模块。默认情况下不构建此模块。
-
--with-http_degradation_module
- 启用构建
ngx_http_degradation_module
模块。默认情况下不构建此模块。 -
--with-http_slice_module
- 启用构建ngx_http_slice_module模块,该模块将请求拆分为子请求,每个子请求返回响应的特定范围。该模块提供了对大型响应更有效的缓存。默认情况下不构建此模块。
-
--with-http_stub_status_module
- 启用构建ngx_http_stub_status_module模块,该模块提供对基本状态信息的访问。默认情况下不构建此模块。
-
--without-http_charset_module
- 禁用构建ngx_http_charset_module模块,该模块将指定的字符集添加到“Content-Type”响应标头字段,并且还可以将数据从一个字符集转换为另一个字符集。
-
--without-http_gzip_module
- 禁用构建压缩 HTTP 服务器响应的模块。需要 zlib 库来构建和运行此模块。
-
--without-http_ssi_module
- 禁用构建ngx_http_ssi_module模块,该模块处理通过它的响应中的 SSI(服务器端包含)命令。
-
--without-http_userid_module
- 禁用构建ngx_http_userid_module模块,该模块设置适合客户端识别的 Cookie。
-
--without-http_access_module
- 禁用构建ngx_http_access_module模块,该模块允许限制对某些客户端地址的访问。
-
--without-http_auth_basic_module
- 禁用构建ngx_http_auth_basic_module模块,该模块允许通过使用“HTTP 基本身份验证”协议验证用户名和密码来限制对资源的访问。
-
--without-http_mirror_module
- 禁用构建ngx_http_mirror_module模块,该模块通过创建后台镜像子请求来实现原始请求的镜像。
-
--without-http_autoindex_module
- 禁用构建ngx_http_autoindex_module模块,该模块处理以斜杠字符('
/
')结尾的请求,并在ngx_http_index_module模块找不到索引文件的情况下生成目录列表。 -
--without-http_geo_module
- 禁用构建ngx_http_geo_module模块,该模块根据客户端 IP 地址创建具有值的变量。
-
--without-http_map_module
- 禁用构建ngx_http_map_module模块,该模块根据其他变量的值创建具有值的变量。
-
--without-http_split_clients_module
- 禁用构建ngx_http_split_clients_module模块,该模块创建用于 A/B 测试的变量。
-
--without-http_referer_module
- 禁用构建ngx_http_referer_module模块,该模块可以阻止对“Referer”标头字段中具有无效值的请求的站点访问。
-
--without-http_rewrite_module
- 禁用构建允许 HTTP 服务器重定向请求和更改请求 URI的模块。构建和运行此模块需要 PCRE 库。
-
--without-http_proxy_module
- 禁用构建 HTTP 服务器代理模块。
-
--without-http_fastcgi_module
- 禁用构建将请求传递给 FastCGI 服务器的ngx_http_fastcgi_module模块。
-
--without-http_uwsgi_module
- 禁用构建将请求传递给 uwsgi 服务器的ngx_http_uwsgi_module模块。
-
--without-http_scgi_module
- 禁用构建将请求传递给 SCGI 服务器的ngx_http_scgi_module模块。
-
--without-http_grpc_module
- 禁用构建将请求传递给 gRPC 服务器的ngx_http_grpc_module模块。
-
--without-http_memcached_module
- 禁用构建从 memcached 服务器获取响应的ngx_http_memcached_module模块。
-
--without-http_limit_conn_module
- 禁用构建ngx_http_limit_conn_module模块,该模块限制每个键的连接数,例如,来自单个 IP 地址的连接数。
-
--without-http_limit_req_module
- 禁用构建ngx_http_limit_req_module模块,该模块限制每个键的请求处理速率,例如,来自单个 IP 地址的请求的处理速率。
-
--without-http_empty_gif_module
- 禁用构建发出单像素透明 GIF的模块。
-
--without-http_browser_module
- 禁用构建ngx_http_browser_module模块,该模块创建其值取决于“User-Agent”请求头字段的值的变量。
-
--without-http_upstream_hash_module
- 禁用构建实现哈希负载均衡方法的模块。
-
--without-http_upstream_ip_hash_module
- 禁用构建实现ip_hash负载均衡方法的模块。
-
--without-http_upstream_least_conn_module
- 禁用构建实现least_conn负载均衡方法的模块。
-
--without-http_upstream_random_module
- 禁用构建实现随机负载均衡方法的模块。
-
--without-http_upstream_keepalive_module
- 禁用构建提供到上游服务器连接缓存的模块。
-
--without-http_upstream_zone_module
- 禁用构建允许在上游组的共享内存区域中存储运行时状态的模块。
-
--with-http_perl_module
--with-http_perl_module=dynamic
- 启用构建嵌入式 Perl 模块。默认情况下不构建此模块。
-
--with-perl_modules_path=
path
- 定义一个将保存 Perl 模块的目录。
-
--with-perl=
path
- 设置 Perl 二进制文件的名称。
-
--http-log-path=
path
- 设置 HTTP 服务器的主请求日志文件的名称。安装后,始终可以使用access_log指令在
nginx.conf
配置文件中更改文件名。默认情况下,文件名命名为
。prefix
/logs/access.log -
--http-client-body-temp-path=
path
- 定义一个用于存储保存客户端请求正文的临时文件的目录。安装后,始终可以使用client_body_temp_path指令在
nginx.conf
配置文件中更改目录。默认情况下,目录命名为
。prefix
/client_body_temp -
--http-proxy-temp-path=
path
- 定义一个用于存储从代理服务器接收到的数据的临时文件的目录。安装后,始终可以使用proxy_temp_path指令在
nginx.conf
配置文件中更改目录。默认情况下,目录命名为
。prefix
/proxy_temp -
--http-fastcgi-temp-path=
path
- 定义一个用于存储从 FastCGI 服务器接收到的数据的临时文件的目录。安装后,始终可以使用fastcgi_temp_path指令在
nginx.conf
配置文件中更改目录。默认情况下,目录命名为
。prefix
/fastcgi_temp -
--http-uwsgi-temp-path=
path
- 定义一个用于存储从 uwsgi 服务器接收到的数据的临时文件的目录。安装后,始终可以使用uwsgi_temp_path指令在
nginx.conf
配置文件中更改目录。默认情况下,目录命名为
。prefix
/uwsgi_temp -
--http-scgi-temp-path=
path
- 定义一个用于存储从 SCGI 服务器接收到的数据的临时文件的目录。安装后,始终可以使用scgi_temp_path指令在
nginx.conf
配置文件中更改目录。默认情况下,目录命名为
。prefix
/scgi_temp
-
--without-http
- 禁用HTTP服务器。
-
--without-http-cache
- 禁用 HTTP 缓存。
-
--with-mail
--with-mail=dynamic
- 启用 POP3/IMAP4/SMTP 邮件代理服务器。
-
--with-mail_ssl_module
- 启用构建一个模块,该模块为邮件代理服务器添加SSL/TLS 协议支持。默认情况下不构建此模块。构建和运行此模块需要 OpenSSL 库。
-
--without-mail_pop3_module
- 在邮件代理服务器中禁用POP3协议。
-
--without-mail_imap_module
- 在邮件代理服务器中禁用IMAP协议。
-
--without-mail_smtp_module
- 在邮件代理服务器中禁用SMTP协议。
-
--with-stream
--with-stream=dynamic
- 启用构建用于通用 TCP/UDP 代理和负载均衡的流模块。默认情况下不构建此模块。
-
--with-stream_ssl_module
- 启用构建一个模块,该模块为流模块添加SSL/TLS 协议支持。默认情况下不构建此模块。构建和运行此模块需要 OpenSSL 库。
-
--with-stream_realip_module
- 启用构建ngx_stream_realip_module模块,该模块将客户端地址更改为 PROXY 协议标头中发送的地址。默认情况下不构建此模块。
-
--with-stream_geoip_module
--with-stream_geoip_module=dynamic
- 启用构建ngx_stream_geoip_module模块,该模块创建取决于客户端 IP 地址和预编译MaxMind数据库的变量。默认情况下不构建此模块。
-
--with-stream_ssl_preread_module
- 启用构建ngx_stream_ssl_preread_module模块,该模块允许在不终止 SSL/TLS 的情况下从ClientHello消息中提取信息。默认情况下不构建此模块。
-
--without-stream_limit_conn_module
- 禁用构建ngx_stream_limit_conn_module模块,该模块限制每个键的连接数,例如,来自单个 IP 地址的连接数。
-
--without-stream_access_module
- 禁用构建ngx_stream_access_module模块,该模块允许限制对某些客户端地址的访问。
-
--without-stream_geo_module
- 禁用构建ngx_stream_geo_module模块,该模块创建其值取决于客户端 IP 地址的变量。
-
--without-stream_map_module
- 禁用构建ngx_stream_map_module模块,该模块创建其值取决于其他变量的值的变量。
-
--without-stream_split_clients_module
- 禁用构建ngx_stream_split_clients_module模块,该模块创建用于 A/B 测试的变量。
-
--without-stream_return_module
- 禁用构建ngx_stream_return_module模块,该模块将某些指定值发送到客户端,然后关闭连接。
-
--without-stream_set_module
- 禁用构建ngx_stream_set_module模块,该模块设置变量的值。
-
--without-stream_upstream_hash_module
- 禁用构建实现哈希负载均衡方法的模块。
-
--without-stream_upstream_least_conn_module
- 禁用构建实现least_conn负载均衡方法的模块。
-
--without-stream_upstream_random_module
- 禁用构建实现随机负载均衡方法的模块。
-
--without-stream_upstream_zone_module
- 禁用构建允许在上游组的共享内存区域中存储运行时状态的模块。
-
--with-google_perftools_module
- 启用构建ngx_google_perftools_module模块,该模块使用Google 性能工具启用 nginx 工作进程的性能分析。该模块适用于 nginx 开发人员,默认情况下不构建。
-
--with-cpp_test_module
- 启用构建
ngx_cpp_test_module
模块。
-
--add-module=
path
- 启用外部模块。
-
--add-dynamic-module=
path
- 启用外部动态模块。
-
--with-compat
- 启用动态模块兼容性。
-
--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
。
-
--without-pcre
- 禁用 PCRE 库的使用。
-
--with-pcre
- 强制使用 PCRE 库。
-
--with-pcre=
path
- 设置 PCRE 库源代码的路径。需要从PCRE网站下载库分发版并解压缩。其余工作由 nginx 的
./configure
和make
完成。该库对于location指令中的正则表达式支持和ngx_http_rewrite_module模块是必需的。 -
--with-pcre-opt=
parameters
- 设置 PCRE 的其他构建选项。
-
--with-pcre-jit
- 使用“即时编译”支持构建 PCRE 库(1.1.12,pcre_jit 指令)。
-
--without-pcre2
- 禁用使用 PCRE2 库,而使用原始 PCRE 库(1.21.5)。
-
--with-zlib=
path
- 设置 zlib 库源代码的路径。需要从 zlib 网站下载库分发版并解压。其余操作由 nginx 的
./configure
和make
完成。该库是 ngx_http_gzip_module 模块所需的。 -
--with-zlib-opt=
parameters
- 设置 zlib 的额外构建选项。
-
--with-zlib-asm=
cpu
- 启用使用针对指定 CPU 优化的 zlib 汇编程序源代码:
pentium
、pentiumpro
。
-
--with-libatomic
- 强制使用 libatomic_ops 库。
-
--with-libatomic=
path
- 设置 libatomic_ops 库源代码的路径。
-
--with-openssl=
path
- 设置 OpenSSL 库源代码的路径。
-
--with-openssl-opt=
parameters
- 设置 OpenSSL 的额外构建选项。
-
--with-debug
- 启用 调试日志。
参数使用示例(所有这些都需要在一行中输入)
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre2-10.39 --with-zlib=../zlib-1.3
配置完成后,使用 make
编译并安装 nginx。