Skip to main content

1.基础安装

版本选择

NGINX开源有两个版本:

  • 主线 – 包括最新功能和错误修复,并且始终是最新的,可靠的,但它可能包括一些实验模块,并且也可能有一些新的错误。
  • 稳定 – 不包括所有最新功能,但具有始终向后移植到主线版本的关键错误修复。我们建议为生产服务器使用稳定版本。

从RHEL预构建软件包安装

#安装 EPEL 存储库:
sudo yum install epel-release
yum update

#安装 NGINX
sudo yum install nginx

#验证安装
nginx -v

从官方repo安装

#安装必备组件:
sudo yum install yum-utils

#添加nginx.repo
#sudo vi /etc/yum.repos.d/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

#更新存储库
sudo yum update
#安装 NGINX
yum install nginx
#启动NGINX
sudo nginx
#验证 NGINX 是否已启动并正在运行
curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.23.4

从源代码编译和安装

安装 NGINX 依赖项

#PCRE – 支持正则表达式。NGINX Core和Rewriter模块需要。
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.1t.tar.gz
tar -zxf openssl-1.1.1t.tar.gz
cd openssl-1.1.1t
./Configure darwin64-x86_64-cc --prefix=/usr
make
sudo make install

下载源码

#最新稳定版本
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
--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

以上配置参数解释:

参数描述
--prefix=<PATH>NGINX 文件的目录,以及由其他configure脚本选项设置的所有相对路径(不包括库的路径)和nginx.conf 配置文件的路径的基本位置。默认值:/usr/local/nginx.
--sbin-path=<PATH>NGINX 可执行文件的名称,默认值:**/sbin/nginx
--conf-path=<PATH>NGINX 配置文件的名称。可以在启动时通过使用 -c <FILENAME>选项指定其他文件来覆盖此值。默认值:**conf/nginx.conf
--pid-path=<PATH>nginx.pid 文件的名称,用于存储主进程的进程 ID。可以使用 NGINX 配置文件中 nginxpid 指令更改文件名的路径。默认值:**/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 库源的路径,这是Location指令和Rewrite模块中正则表达式支持所必需的。
--with-pcre-jit构建具有“just-in-time compilation(即时编译)”支持(pcre_jit指令)的 PCRE 库。
--with-zlib=<PATH>zlib库源的路径,这是 Gzip 模块所必需的。

配置 GCC 选项

参数描述
--with-cc-opt="<PARAMETERS>"添加到 CFLAGS变量的其他参数。在 FreeBSD 下使用 PC 库时, 必填值是 --with-cc-opt="-I /usr/local/include" 。如果需要增加 select()支持的文件数,也可以在此处指定,如以下示例所示:--with-cc-opt="-D FD_SETSIZE=2048"
--with-ld-opt="<PARAMETERS>"链接期间使用的其他参数。在 FreeBSD 下使用 PC 库时, 必填值是 :--with-ld-opt="-L /usr/local/lib"

指定 NGINX 连接处理方法

使用该 configure脚本,您可以重新定义基于事件的轮询方法。

模块名称描述
--with-select_module,--without-select_module启用或禁用生成使 NGINX 能够使用该方法的 select()模块。
--with-poll_module,--without-poll_module启用或禁用生成使 NGINX 能够使用该方法的 poll()模块。

选择要构建的 NGINX 模块

默认构建的模块

如果不需要默认构建的模块,则可以通过在 --without-<MODULE-NAME> 来禁用它,如以下示例中禁用Empty 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_access_module接受或拒绝来自指定客户端地址的请求。
http_auth_basic_module通过使用 HTTP 基本身份验证协议验证用户名和密码来限制对资源的访问。
http_autoindex_module处理以正斜杠字符 (/ ) 结尾的请求并生成目录列表。
http_browser_module创建其值取决于 User-Agent请求标头值的变量。
http_charset_module将指定的字符集添加到 Content-Type响应标头。可以将数据从一个字符集转换为另一个字符集。
http_empty_gif_module发出单像素透明 GIF。(Emits a single-pixel transparent GIF.)
http_fastcgi_module将请求传递到 FastCGI 服务器。
http_geo_module创建具有依赖于客户端 IP 地址的值的变量。
http_gzip_module使用 gzip压缩响应,将传输的数据量减少一半或更多。
http_limit_conn_module限制每个定义的密钥的连接数,特别是来自单个 IP 地址的连接数。
http_limit_req_module限制每个定义的密钥的请求处理速率,特别是来自单个 IP 地址的请求的处理速率。
http_map_module创建其值取决于其他变量值的变量。
http_memcached_module将请求传递到 memcached 服务器。
http_proxy_module将 HTTP 请求传递到另一台服务器。
http_referer_module阻止标头中具有无效值的 Referer请求。
http_rewrite_module使用正则表达式更改请求 URI 并返回重定向;有条件地选择配置。需要PCRE 库。
http_scgi_module将请求传递到 SCGI 服务器。
http_ssi_module在通过它的响应中处理 SSI(Server Side Includes)命令。
http_split_clients_module创建适用于 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_module设置适合客户识别的 Cookie。
http_uwsgi_module将请求传递到 uwsgi 服务器。
包括默认未构建的模块

许多 NGINX 模块不是默认构建的,必须在要构建的 configure命令行中列出。包含非默认模块的 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 响应。该模块需要Libxml2XSLT 库。要改为作为单独的动态模块进行编译,请将该选项更改为 --with-http_xslt_module=dynamic
--with-http_v2_module启用对HTTP/2 的支持。有关详细信息,请参阅 NGINX 博客上的 NGINX 中的 HTTP/2 模块
--with-mail启用邮件代理功能。要改为作为单独的动态模块进行编译,请将该选项更改为 --with-mail=dynamic
--with-mail_ssl_module为邮件代理服务器提供与 SSL/TLS 协议配合使用的支持。需要一个 SSL 库,如OpenSSL。
--with-stream启用 TCP 和 UDP 代理功能。要改为作为单独的动态模块进行编译,请将该选项更改为 --with-stream=dynamic
--with-stream_ssl_module为流代理服务器提供与 SSL/TLS 协议配合使用的支持。需要一个 SSL 库,如OpenSSL。
-- with-threads使 NGINX 能够使用线程池。有关详细信息,请参阅NGINX 博客上的 NGINX Boost Performance 9x! 中的线程池

静态链接模块

开源版本的NGINX中内置的大多数模块都是静态链接的:它们在编译时内置到NGINX中,并静态链接到NGINX二进制文件。这些模块只能通过重新编译NGINX来禁用。

要使用静态链接的第三方模块编译 NGINX 开源,请在 configure命令中包含 --add-module=<PATH>选项,其中 <PATH> 是源代码的路径(此示例适用于 RTMP 模块):

./configure ... --add-module=/usr/build/nginx-rtmp-module

动态链接模块

NGINX模块也可以编译为共享对象(*.so文件),然后在运行时动态加载到NGINX中。这提供了更大的灵活性,因为可以通过在 NGINX 配置文件中添加或删除关联的 load_module 指令并重新加载配置来随时加载或卸载模块。请注意,模块本身必须支持动态链接。

要使用动态加载的第三方模块编译 NGINX ,请在 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;

从源完成安装

#编译并安装内部版本:
make
sudo make install
#安装完成后,启动NGINX
sudo nginx