NGINX是一款高性能的HTTP和反向代理服务器,也同样功能强大的邮件代理服务器。因其轻量级以及高并发处理能力而闻名,NGINX特别适用于负载大的网站和应用服务,能有效地提升网站的响应速度和可靠性。作为一个Web服务器,它处理静态内容、索引文件以及自动索引非常出色,并且通过简化的配置和低资源消耗来提高性能。
在反向代理方面,NGINX能够处理传入的网络流量并将其重定向到内部服务器,这样有助于增强后端服务的负载平衡和扩展能力。NGINX通过管理客户端和多个服务器之间的网络流量,在保持高效的同时也确保了网络的安全性。这使得NGINX成为了一个理想的中介工具,用来控制和优化应用程序数据的流向。
此外,NGINX支持各种常见的网络协议,并提供了丰富的模块,可以通过增加模块来扩展其功能。NGINX的配置文件语法简洁明了,使得管理者可以轻松配置和维护。不仅如此,NGINX社区活跃,提供大量的文档和一个庞大的用户基础,这对于解决问题和分享最佳实践非常有帮助。
安装 NGINX 开源
按照所有支持的 Linux 发行版的分步说明,将 NGINX 开源安装为预构建的软件包或从源代码安装。
本文介绍如何安装 NGINX 开源软件。
在稳定版本或主线版本之间进行选择
NGINX 开源有两个版本:
- 主线 – 包括最新功能和错误修复,并且始终保持最新状态。它是可靠的,但它可能包含一些实验性模块,并且也可能有一些新的错误。
- 稳定 – 不包括所有最新功能,但具有始终向后移植到主线版本的关键错误修复。我们建议生产服务器使用稳定版本。
在预构建包和从源代码编译之间进行选择
NGINX 开源主线版本和稳定版本都可以通过两种方式安装:
- 作为预构建的二进制包。这是安装 NGINX 开源的一种快速、简单的方法。该软件包包含几乎所有官方 NGINX 模块,并且可用于大多数流行的操作系统。请参阅安装预构建包。
- 作为二进制文件,您可以从源代码编译。这种方式更加灵活:您可以添加特定模块,包括第三方模块,或者应用最新的安全补丁。有关详细信息,请参阅从源代码编译和安装。
安装预构建包
从包安装 NGINX 开源比从源代码构建更容易、更快,但从源代码构建使您可以在非标准模块中进行编译。预构建的软件包适用于大多数流行的 Linux 发行版,包括 CentOS、Debian、Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu。请参阅 nginx.org 上的 Linux 软件包以获取当前支持的操作系统列表。
预构建包中包含的模块
有关每个预构建包中包含的模块列表,请参阅 nginx.org 上的源包。
安装预构建的 RHEL、CentOS、Oracle Linux、AlmaLinux、Rocky Linux 软件包
NGINX, Inc. 提供适用于以下 CentOS、Oracle Linux、RHEL、AlmaLinux 和 Rocky Linux 版本的软件包:
版本 | 支持的平台 |
---|---|
7.4+ | x86_64、aarch64/arm64 |
8x | x86_64、aarch64/arm64、s390x |
9x | x86_64、aarch64/arm64、s390x |
该软件包可以从以下位置安装:
- 默认的 RHEL / CentOS / Oracle Linux / AlmaLinux / Rocky Linux 存储库。这是最快的方法,但通常提供的包已经过时了。
- 官方存储库位于 nginx.org。您必须第一次设置
yum
存储库,但之后提供的包始终是最新的。
从操作系统存储库安装预构建的 CentOS/RHEL/Oracle Linux/AlmaLinux/Rocky Linux 软件包
-
安装 EPEL 存储库:
sudo yum install epel-release
-
更新存储库:
sudo yum update
-
安装 NGINX 开源:
sudo yum install nginx
-
验证安装:
sudo nginx -v
从官方 NGINX 存储库安装预构建的 RHEL/CentOS/Oracle Linux/AlmaLinux/Rocky Linux 软件包
-
安装先决条件:
sudo yum install yum-utils
-
通过在 /etc/yum.repos.d 中创建文件 nginx.repo,为 RHEL/CentOS/Oracle Linux/AlmaLinux/Rocky Linux 设置
yum
存储库,例如使用vi
:sudo vi /etc/yum.repos.d/nginx.repo
-
将以下行添加到 nginx.repo:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
其中
stable
或mainline
元素指向 NGINX 开源的最新稳定或主线版本。默认情况下,使用稳定 nginx 软件包的存储库。如果您想使用主线 nginx 软件包,请运行以下命令:sudo yum-config-manager --enable nginx-mainline
-
保存更改并退出
vi
(按 ESC 并在:
提示符下键入wq
)。 -
更新存储库:
sudo yum update
-
安装 NGINX 开源包:
sudo yum install nginx
当提示您接受 GPG 密钥时,验证指纹是否与
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
匹配,如果是,则接受。 -
启动 NGINX 开源:
sudo nginx
-
验证 NGINX 开源代码是否已启动并正在运行:
curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.25.1
安装预构建的 Debian 软件包
NGINX 为以下 Debian 操作系统提供软件包:
版本 | 代码名称 | 支持的平台 |
---|---|---|
11.x | 靶心 | x86_64、aarch64/arm64 |
12.x | 书呆子 | x86_64、aarch64/arm64 |
该软件包可以从以下位置安装:
- 默认的 Debian 存储库。这是最快的方法,但通常提供的包已经过时了。
- 官方存储库位于 nginx.org。您必须第一次设置
apt-get
存储库,但之后提供的包始终是最新的。
从操作系统存储库安装预构建的 Debian 软件包
-
更新 Debian 存储库信息:
sudo apt-get update
-
安装 NGINX 开源包:
sudo apt-get install nginx
-
验证安装:
sudo nginx -v
从官方 NGINX 存储库安装预构建的 Debian 软件包
-
安装先决条件:
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
-
导入官方 nginx 签名密钥,以便
apt
可以验证包的真实性。获取密钥:curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
-
验证下载的文件是否包含正确的密钥:
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
输出应包含完整的指纹
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
,如下所示:pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14] 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 uid nginx signing key <signing-key@nginx.com>
如果指纹不同,请删除该文件。
-
要为稳定的 nginx 软件包设置
apt
存储库,请运行以下命令:echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
如果您想使用
mainline
nginx 软件包,请运行以下命令:echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
-
设置存储库固定以优先选择我们的包而不是发行版提供的包:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | sudo tee /etc/apt/preferences.d/99nginx
-
安装 NGINX 包:
sudo apt update sudo apt install nginx
-
启动 NGINX 开源:
sudo nginx
-
验证 NGINX 开源代码是否已启动并正在运行:
curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.25.1
安装预构建的 Ubuntu 软件包
NGINX 为以下 Ubuntu 操作系统提供了软件包:
版本 | 代码名称 | 支持的平台 |
---|---|---|
20.04 | 焦点 | x86_64、aarch64/arm64、s390x |
22.04 | 杰米 | x86_64、aarch64/arm64、s390x |
22.10 | 动力学 | x86_64、aarch64/arm64 |
23.04 | 农历 | x86_64、aarch64/arm64 |
该软件包可以从以下位置安装:
- 默认的 Ubuntu 存储库。这是最快的方法,但通常提供的包已经过时了。
- 官方存储库位于 nginx.org。您必须第一次设置
apt-get
存储库,但之后提供的包始终是最新的。
从 Ubuntu 存储库安装预构建的 Ubuntu 软件包
-
更新 Ubuntu 存储库信息:
sudo apt-get update
-
安装包:
sudo apt-get install nginx
-
验证安装:
sudo nginx -v
从官方 NGINX 存储库安装预构建的 Ubuntu 软件包
-
安装先决条件:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
-
导入官方 nginx 签名密钥,以便 apt 可以验证包的真实性。获取密钥:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
-
验证下载的文件是否包含正确的密钥:
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
输出应包含完整的指纹
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
,如下所示:pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14] 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 uid nginx signing key <signing-key@nginx.com>
如果指纹不同,请删除该文件。
-
要为稳定的 nginx 软件包设置
apt
存储库,请运行以下命令:echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
如果您想使用
mainline
nginx 软件包,请运行以下命令:echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
-
设置存储库固定以优先选择我们的包而不是发行版提供的包:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | sudo tee /etc/apt/preferences.d/99nginx
-
安装 NGINX 开源:
sudo apt update sudo apt install nginx
-
启动 NGINX 开源:
sudo nginx
-
验证 NGINX 开源代码是否已启动并正在运行:
curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.25.1
安装 SUSE 软件包
NGINX 为 SUSE Linux Enterprise Server 提供了软件包:
版本 | 支持的平台 |
---|---|
SLES 12 SP5+ | x86_64 |
SLES 15 SP2+ | x86_64 |
从官方 NGINX 存储库安装预构建的 SUSE 软件包
-
安装先决条件:
sudo zypper install curl ca-certificates gpg2
-
要为稳定的 nginx 软件包设置
zypper
存储库,请运行以下命令:sudo zypper addrepo --gpgcheck --type yum --refresh --check \ 'http://nginx.org/packages/sles/$releasever_major' nginx-stable
-
如果您想使用主线 nginx 软件包,请运行以下命令:
sudo zypper addrepo --gpgcheck --type yum --refresh --check \ 'http://nginx.org/packages/mainline/sles/$releasever_major' nginx-mainline
-
导入官方 nginx 签名密钥,以便
zypper/rpm
可以验证包的真实性。获取密钥:curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
-
验证下载的文件是否包含正确的密钥:
gpg --with-fingerprint /tmp/nginx_signing.key
输出应包含完整的指纹
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
,如下所示:pub 2048R/7BD9BF62 2011-08-19 [expires: 2024-06-14] Key fingerprint = 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 uid nginx signing key <signing-key@nginx.com>
-
将密钥导入 rpm 数据库:
sudo rpmkeys --import /tmp/nginx_signing.key
-
要安装 nginx,请运行以下命令:
sudo zypper install nginx
安装预构建的 Alpine Linux 软件包
NGINX 为以下 Alpine Linux 操作系统提供软件包:
版本 | 支持的平台 |
---|---|
3.15 | x86_64、aarch64/arm64 |
3.16 | x86_64、aarch64/arm64 |
3.17 | x86_64、aarch64/arm64 |
3.18 | x86_64、aarch64/arm64 |
该软件包可以从 nginx.org 的官方存储库安装。您必须第一次设置 apt-get
存储库,但之后提供的包始终是最新的。
从官方 NGINX 存储库安装预构建的 Alpine Linux 软件包
-
安装先决条件:
sudo apk add openssl curl ca-certificates
-
要为稳定的 nginx 软件包设置 apk 存储库,请运行以下命令:
printf "%s%s%s\n" \ "http://nginx.org/packages/alpine/v" \ `egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release` \ "/main" \ | sudo tee -a /etc/apk/repositories
对于主线 nginx 包,请运行以下命令:
printf "%s%s%s\n" \ "http://nginx.org/packages/mainline/alpine/v" \ `egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release` \ "/main" \ | sudo tee -a /etc/apk/repositories
-
导入官方的 nginx 签名密钥,以便 apk 可以验证包的真实性。获取密钥:
curl -o /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub
-
验证下载的文件是否包含正确的密钥:
openssl rsa -pubin -in /tmp/nginx_signing.rsa.pub -text -noout
输出应包含以下模数:
Public-Key: (2048 bit) Modulus: 00:fe:14:f6:0a:1a:b8:86:19:fe:cd:ab:02:9f:58: 2f:37:70:15:74:d6:06:9b:81:55:90:99:96:cc:70: 5c:de:5b:e8:4c:b2:0c:47:5b:a8:a2:98:3d:11:b1: f6:7d:a0:46:df:24:23:c6:d0:24:52:67:ba:69:ab: 9a:4a:6a:66:2c:db:e1:09:f1:0d:b2:b0:e1:47:1f: 0a:46:ac:0d:82:f3:3c:8d:02:ce:08:43:19:d9:64: 86:c4:4e:07:12:c0:5b:43:ba:7d:17:8a:a3:f0:3d: 98:32:b9:75:66:f4:f0:1b:2d:94:5b:7c:1c:e6:f3: 04:7f:dd:25:b2:82:a6:41:04:b7:50:93:94:c4:7c: 34:7e:12:7c:bf:33:54:55:47:8c:42:94:40:8e:34: 5f:54:04:1d:9e:8c:57:48:d4:b0:f8:e4:03:db:3f: 68:6c:37:fa:62:14:1c:94:d6:de:f2:2b:68:29:17: 24:6d:f7:b5:b3:18:79:fd:31:5e:7f:4c:be:c0:99: 13:cc:e2:97:2b:dc:96:9c:9a:d0:a7:c5:77:82:67: c9:cb:a9:e7:68:4a:e1:c5:ba:1c:32:0e:79:40:6e: ef:08:d7:a3:b9:5d:1a:df:ce:1a:c7:44:91:4c:d4: 99:c8:88:69:b3:66:2e:b3:06:f1:f4:22:d7:f2:5f: ab:6d Exponent: 65537 (0x10001)
-
将密钥移至
apk
可信密钥存储:sudo mv /tmp/nginx_signing.rsa.pub /etc/apk/keys/
-
要安装 nginx,请运行以下命令:
sudo apk add nginx
安装带有动态模块的包时还应该指定
@nginx
标签:sudo apk add nginx-module-image-filter@nginx nginx-module-njs@nginx
安装预构建的 Amazon Linux 软件包
NGINX 提供了以下软件包
- 亚马逊 Linux 2 (LTS) x86_64、aarch64/arm64
- 亚马逊 Linux 2023 x86_64、aarch64/arm64
从官方 NGINX 存储库安装预构建的 Alpine Linux 软件包
-
安装先决条件:
sudo yum install yum-utils
-
要为 Amazon Linux 2 设置
yum
存储库,请使用以下内容创建名为/etc/yum.repos.d/nginx.repo
的文件:[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/amzn2/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/amzn2/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
要为 Amazon Linux 2023 设置
yum
存储库,请使用以下内容创建名为/etc/yum.repos.d/nginx.repo
的文件:[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/amzn/2023/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/amzn/2023/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
默认情况下,使用
stable
nginx 包的存储库。如果您想使用mainline
nginx 软件包,请运行以下命令:sudo yum-config-manager --enable nginx-mainline
-
安装nginx:
sudo yum install nginx
当提示您接受 GPG 密钥时,验证指纹是否与
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
匹配,如果是,则接受。
从源代码编译和安装
从源代码编译 NGINX 开源提供了比预构建软件包更大的灵活性:您可以添加特定模块(来自 NGINX 或第三方),并应用最新的安全补丁。
安装 NGINX 依赖项
在从源代码编译 NGINX Open Source 之前,您需要为其依赖项安装库:
-
PCRE – 支持正则表达式。 NGINX Core 和 Rewrite 模块需要。
wget github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz tar -zxf pcre2-10.42.tar.gz cd pcre2-10.42 ./configure make sudo make install
-
zlib – 支持标头压缩。 NGINX Gzip 模块需要。
wget http://zlib.net/zlib-1.2.13.tar.gz tar -zxf zlib-1.2.13.tar.gz cd zlib-1.2.13 ./configure make sudo make install
-
OpenSSL – 支持 HTTPS 协议。 NGINX SSL 模块和其他模块需要。
wget http://www.openssl.org/source/openssl-1.1.1v.tar.gz tar -zxf openssl-1.1.1v.tar.gz cd openssl-1.1.1v ./Configure darwin64-x86_64-cc --prefix=/usr make sudo make install
下载源代码
从 nginx.org 下载稳定版和主线版的源文件。
要下载并解压最新主线版本的源代码,请运行:
wget https://nginx.org/download/nginx-1.25.1.tar.gz
tar zxf nginx-1.25.1.tar.gz
cd nginx-1.25.1
要下载并解压最新稳定版本的源文件,请运行:
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
配置构建选项
配置选项由 ./configure
脚本指定,该脚本设置各种 NGINX 参数,包括源文件和配置文件的路径、编译器选项、连接处理方法和模块列表。该脚本通过创建编译代码和安装 NGINX 开源所需的 Makefile
来完成。
configure
脚本的选项示例(应作为单行键入):
./configure
--sbin-path=/usr/local/nginx/nginx
--conf-path=/usr/local/nginx/nginx.conf
--pid-path=/usr/local/nginx/nginx.pid
--with-pcre=../pcre2-10.42
--with-zlib=../zlib-1.2.13
--with-http_ssl_module
--with-stream
--with-mail=dynamic
--add-module=/usr/build/nginx-rtmp-module
--add-dynamic-module=/usr/build/3party_module
配置 NGINX 路径
configure
脚本允许您设置 NGINX 二进制文件和配置文件以及 PCRE 或 SSL 等依赖库的路径,以便将它们静态链接到 NGINX 二进制文件。
范围 | 描述 |
---|---|
--prefix=<PATH> |
NGINX 文件的目录,以及其他 configure 脚本选项设置的所有相对路径(不包括库路径)的基本位置以及 nginx.conf 配置文件的路径。默认:/usr/local/nginx。 |
--sbin-path=<PATH> |
NGINX 可执行文件的名称,仅在安装过程中使用。默认值:**/sbin/nginx |
--conf-path=<PATH> |
NGINX 配置文件的名称。但是,您始终可以在启动时通过使用 nginx 命令行上的 -c <FILENAME> 选项指定不同的文件来覆盖此值。默认值:**conf/nginx.conf |
--pid-path=<PATH> |
nginx.pid文件名,存放 nginx 主进程的进程ID。安装后,可以使用 NGINX 配置文件中的 pid 指令更改文件名的路径。默认值:**/logs/nginx.pid |
--error-log-path=<PATH> |
错误、警告和诊断数据的主日志文件的名称。安装后,可以使用 NGINX 配置文件中的 error_log 指令更改文件名。默认值:**/logs/error.log |
--http-log-path=<PATH> |
HTTP 服务器请求的主日志文件的名称。安装后,始终可以使用 NGINX 配置文件中的 access_log 指令更改文件名。默认值:**/logs/access.log |
--user=<NAME> |
NGINX 工作进程使用其凭据的非特权用户的名称。安装后,可以使用 NGINX 配置文件中的用户指令更改名称。默认值: nobody |
--group=<NAME> |
NGINX 工作进程使用其凭据的组的名称。安装后,可以使用 NGINX 配置文件中的用户指令更改名称。默认值:由 --user 选项设置的值。 |
--with-pcre=<PATH> |
PCRE 库的源路径,这是位置指令和重写模块中的正则表达式支持所必需的。 |
--with-pcre-jit |
构建具有“即时编译”支持(pcre_jit 指令)的 PCRE 库。 |
--with-zlib=<PATH> |
zlib 库的源路径,这是 Gzip 模块所需的。 |
配置 NGINX GCC 选项
使用 configure
脚本,您还可以指定编译器相关的选项。
范围 | 描述 |
---|---|
--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" 。 |
指定NGINX连接处理方法
使用 configure
脚本,您可以重新定义基于事件的轮询的方法。有关更多信息,请参阅 NGINX 参考文档中的连接处理方法。
模块名称 | 描述 |
---|---|
--with-select_module , --without-select_module |
启用或禁用构建使 NGINX 能够使用 select() 方法的模块。如果平台似乎不支持更合适的方法,例如 kqueue 、 epoll 或 /dev/poll ,则会自动构建模块。 |
--with-poll_module , --without-poll_module |
启用或禁用构建使 NGINX 能够使用 poll() 方法的模块。如果平台似乎不支持更合适的方法,例如 kqueue 、 epoll 或 /dev/poll ,则会自动构建该模块。 |
选择要构建的 NGINX 模块
NGINX 由一组特定于功能的模块组成,这些模块由 configure
脚本以及其他构建选项指定。
某些模块是默认构建的 – 不必使用 configure
脚本指定它们。但是,可以使用 configure
脚本上的 --without-<MODULE-NAME>
选项从 NGINX 二进制文件中显式排除默认模块。
默认情况下未包含的模块以及第三方模块必须与其他构建选项一起在 configure
脚本中显式指定。此类模块可以静态链接到 NGINX 二进制文件(每次 NGINX 启动时都会加载它们),也可以动态链接到 NGINX 二进制文件(仅当 NGINX 配置文件中包含关联指令时才会加载它们)。
默认构建的模块
如果您不需要默认构建的模块,则可以通过使用 configure
脚本上的 --without-<MODULE-NAME>
选项对其进行命名来禁用它,如本例所示,该示例禁用了空 GIF模块(应输入为单行):
./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-stream
--with-pcre=../pcre2-10.42
--with-zlib=../zlib-1.2.13
--without-http_empty_gif_module
模块名称 | 描述 |
---|---|
http_访问模块 | 接受或拒绝来自指定客户端地址的请求。 |
http_auth_basic_module | 通过使用 HTTP 基本身份验证协议验证用户名和密码来限制对资源的访问。 |
http_autoindex_模块 | 处理以正斜杠字符 (/) 结尾的请求并生成目录列表。 |
http_浏览器_模块 | 创建其值取决于 User-Agent 请求标头的值的变量。 |
http_字符集_模块 | 将指定的字符集添加到 Content-Type 响应标头。可以将数据从一种字符集转换为另一种字符集。 |
http_empty_gif_module | 发出单像素透明 GIF。 |
http_fastcgi_模块 | 将请求传递到 FastCGI 服务器。 |
http_geo_模块 | 创建其值取决于客户端 IP 地址的变量。 |
http_gzip_模块 | 使用 gzip 压缩响应,将传输的数据量减少一半或更多。 |
http_limit_conn_模块 | 限制每个已定义密钥的连接数,特别是来自单个 IP 地址的连接数。 |
http_limit_req_module | 限制每个已定义密钥的请求处理速率,特别是来自单个 IP 地址的请求的处理速率。 |
http_map_模块 | 创建其值取决于其他变量的值的变量。 |
http_memcached_模块 | 将请求传递到 memcached 服务器。 |
http_proxy_模块 | 将 HTTP 请求传递到另一台服务器。 |
http_referer_模块 | 阻止 Referer 标头中包含无效值的请求。 |
http_rewrite_module | 使用正则表达式更改请求 URI 并返回重定向;有条件地选择配置。需要 PCRE 库。 |
http_scgi_模块 | 将请求传递到 SCGI 服务器。 |
http_ssi_模块 | 处理通过它的响应中的 SSI(服务器端包含)命令。 |
http_split_clients_模块 | 创建适合 A/B 测试的变量,也称为拆分测试。 |
http_upstream_hash_module | 启用通用哈希负载平衡方法。 |
http_upstream_ip_hash_module | 启用 IP 哈希负载平衡方法。 |
http_upstream_keepalive_module | 启用保活连接。 |
http_upstream_least_conn_module | 启用最少连接负载平衡方法。 |
http_upstream_zone_module | 启用共享内存区域。 |
http_userid_模块 | 设置适合客户端识别的 cookie。 |
http_uwsgi_模块 | 将请求传递到 uwsgi 服务器。 |
包括默认未构建的模块
许多 NGINX 模块不是默认构建的,必须在 configure
命令行上列出才能构建。
mail、stream、geoip、image_filter、perl 和 xslt 模块可以编译为动态。有关详细信息,请参阅动态模块。
包含非默认模块的 configure
命令示例(应键入单行):
./configure
--sbin-path=/usr/local/nginx/nginx
--conf-path=/usr/local/nginx/nginx.conf
--pid-path=/usr/local/nginx/nginx.pid
--with-pcre=../pcre2-10.42
--with-zlib=../zlib-1.2.13
--with-http_ssl_module
--with-stream
--with-mail
模块名称 | 描述 |
---|
-
--with-cpp_test_module
- 测试头文件的 C++ 兼容性。
--with-debug
- 启用调试日志。
-
--with-file-aio
-
启用异步 I/O。
-
允许使用 Google 性能工具库。
--
with-http_addition_module- 在响应之前和之后添加文本。
--
with-http_auth_request_module- 根据子请求的结果实现客户端授权。
--
with-http_dav_module- 使用 WebDAV 协议实现文件管理自动化。
--with-http_degradation_module
- 当内存大小超过定义值时允许返回错误。
--
with-http_flv_module- 为 Flash 视频 (FLV) 文件提供伪流服务器端支持。
--
with-http_geoip_module- 允许创建其值取决于客户端 IP 地址的变量。该模块使用 MaxMind GeoIP 数据库。要编译为单独的动态模块,请将选项更改为
--with-http_geoip_module=dynamic
。
--
with-http_gunzip_module- 对于不支持 zip 编码方法的客户端,使用
Content-Encoding: gzip
解压缩响应。
--
with-http_gzip_static_module- 允许发送带有 .gz 文件扩展名的预压缩文件,而不是常规文件。
--
with-http_image_filter_module- 转换 JPEG、GIF 和 PNG 格式的图像。该模块需要 LibGD 库。要编译为单独的动态模块,请将选项更改为
--with-http_image_filter_module=dynamic
。
--
with-http_mp4_module- 为 MP4 文件提供伪流服务器端支持。
--
with-http_perl_module- 用于在 Perl 中实现位置和变量处理程序并将 Perl 调用插入到 SSI 中。需要 PERL 库。要编译为单独的动态模块,请将选项更改为
--with-http_perl_module=dynamic
。
--
with-http_random_index_module- 处理以斜杠字符(“/”)结尾的请求,并在目录中随机选择一个文件作为索引文件。
--
with-http_realip_module- 将客户端地址更改为在指定标头字段中发送的地址。
--
with-http_secure_link_module- 用于检查请求链接的真实性,保护资源免遭未经授权的访问,并限制链接生命周期。
--
with-http_slice_module- 允许将请求拆分为子请求,每个子请求返回一定范围的响应。提供更有效的大文件缓存。
--
with-http_ssl_module- 启用 HTTPS 支持。需要 SSL 库,例如 OpenSSL。
--
with-http_stub_status_module- 提供对基本状态信息的访问。请注意,NGINX Plus 客户不需要此模块,因为他们已经提供了扩展状态指标和交互式仪表板。
--
with-http_sub_module- 通过用另一个指定字符串替换一个指定字符串来修改响应。
--
with-http_xslt_module- 使用一个或多个 XSLT 样式表转换 XML 响应。该模块需要 Libxml2 和 XSLT 库。要编译为单独的动态模块,请将选项更改为
--with-http_xslt_module=dynamic
。
--
with-http_v2_module- 启用对 HTTP/2 的支持。有关详细信息,请参阅 NGINX 博客上的 NGINX 中的 HTTP/2 模块。
-
--
带有邮件 - 启用邮件代理功能。要编译为单独的动态模块,请将选项更改为
--with-mail=dynamic
。
--
with-mail_ssl_module- 为邮件代理服务器提供支持以使用 SSL/TLS 协议。需要 SSL 库,例如 OpenSSL。
-
--
带流 - 启用 TCP 和 UDP 代理功能。要编译为单独的动态模块,请将选项更改为
--with-stream=dynamic
。
--
with-stream_ssl_module- 为流代理服务器提供支持以使用 SSL/TLS 协议。需要 SSL 库,例如 OpenSSL。
--with-threads
- 使 NGINX 能够使用线程池。有关详细信息,请参阅 NGINX 中的线程池将性能提升 9 倍!在 NGINX 博客上。
包括第三方模块
您可以通过使用自己的模块或第三方模块编译 NGINX 开源来扩展 NGINX 功能。 NGINX Wiki 中列出了一些第三方模块。使用第三方模块需要您自担风险,因为它们的稳定性得不到保证
静态链接模块
NGINX 开源中内置的大多数模块都是静态链接的:它们在编译时内置于 NGINX 开源中,并静态链接到 NGINX 二进制文件。这些模块只能通过重新编译 NGINX 来禁用。
要使用静态链接的第三方模块编译 NGINX Open Source,请在 configure
命令中包含 --add-module=<PATH>
选项,其中 <PATH>
是源代码的路径(本例针对RTMP模块):
./configure ... --add-module=/usr/build/nginx-rtmp-module
动态链接模块
NGINX 模块还可以编译为共享对象(*.so 文件),然后在运行时动态加载到 NGINX Open Source 中。这提供了更大的灵活性,因为可以通过在 NGINX 配置文件中添加或删除关联的 load_module 指令并重新加载配置来随时加载或卸载模块。请注意,模块本身必须支持动态链接。
要使用动态加载的第三方模块编译 NGINX Open Source,请在 configure
命令中包含 --add-dynamic-module=<PATH>
选项,其中 <PATH>
是源代码的路径:
./configure ... --add-dynamic-module=<PATH>
生成的 *.so 文件将写入 prefix/modules/ 目录,其中 prefix 是服务器文件的目录,例如 /usr/local/nginx/。
要加载动态模块,请在安装后将 load_module 指令添加到 NGINX 配置中:
load_module modules/ngx_mail_module.so;
有关更多信息,请参阅 NGINX 博客上的为 NGINX 和 NGINX Plus 编译第三方动态模块以及 Wiki 上的扩展 NGINX。
从源完成安装
-
编译并安装构建:
make sudo make install
-
安装完成后,启动NGINX Open Source:
sudo nginx
评论(0)