NGINX 安装与构建指南
1. 安装方式概述
NGINX 提供三种主要安装途径:
| 方式 |
适用场景 |
说明 |
| Linux 软件包 |
生产环境快速部署 |
使用 nginx.org 提供的预构建包 |
| FreeBSD Ports/Packages |
FreeBSD 系统 |
Ports 提供更多编译选项 |
| 源码编译 |
需要特殊功能 |
最大灵活性,可自定义模块 |
2. Linux 软件包安装
RHEL/CentOS
# 安装 EPEL 仓库
yum install epel-release
# 安装 nginx
yum install nginx
Ubuntu/Debian
# 更新包索引
apt update
# 安装 nginx
apt install nginx
官方仓库安装(推荐)
RHEL/CentOS:
# 添加 nginx 官方仓库
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=0
enabled=1
EOF
yum install nginx
Ubuntu/Debian:
# 安装依赖
apt install curl gnupg2 ca-certificates lsb-release
# 添加 nginx 签名密钥
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor > /usr/share/keyrings/nginx-archive-keyring.gpg
# 添加仓库
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx
3. 从源码构建
构建流程
# 1. 下载源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 2. 配置编译选项
./configure --option=value ...
# 3. 编译
make
# 4. 安装
make install
4. 配置参数详解
路径配置参数
| 参数 |
说明 |
默认值 |
--prefix=path |
服务器文件目录(所有相对路径基准) |
/usr/local/nginx |
--sbin-path=path |
nginx 可执行文件路径 |
prefix/sbin/nginx |
--modules-path=path |
动态模块安装目录 |
prefix/modules |
--conf-path=path |
配置文件路径 |
prefix/conf/nginx.conf |
--error-log-path=path |
错误日志文件路径 |
prefix/logs/error.log |
--pid-path=path |
主进程 PID 文件 |
prefix/logs/nginx.pid |
--lock-path=path |
锁文件路径 |
prefix/logs/nginx.lock |
--http-log-path=path |
HTTP 请求日志文件 |
prefix/logs/access.log |
--http-client-body-temp-path=path |
客户端请求体临时文件目录 |
prefix/client_body_temp |
--http-proxy-temp-path=path |
代理临时文件目录 |
prefix/proxy_temp |
--http-fastcgi-temp-path=path |
FastCGI 临时文件目录 |
prefix/fastcgi_temp |
--http-uwsgi-temp-path=path |
uwsgi 临时文件目录 |
prefix/uwsgi_temp |
--http-scgi-temp-path=path |
SCGI 临时文件目录 |
prefix/scgi_temp |
用户与进程参数
| 参数 |
说明 |
默认值 |
--user=name |
工作进程使用的非特权用户 |
nobody |
--group=name |
工作进程使用的组 |
与用户同名 |
--build=name |
构建名称 |
- |
--builddir=path |
构建目录 |
- |
HTTP 模块启用参数 (--with-*)
| 参数 |
说明 |
依赖 |
--with-http_ssl_module |
HTTPS 支持 |
OpenSSL |
--with-http_v2_module |
HTTP/2 支持 |
- |
--with-http_v3_module |
HTTP/3 支持 |
OpenSSL 3.5+ / BoringSSL |
--with-http_realip_module |
修改客户端地址 |
- |
--with-http_addition_module |
响应前后添加文本 |
- |
--with-http_xslt_module |
XML 转换 |
libxml2, libxslt |
--with-http_image_filter_module |
图像转换 |
libgd |
--with-http_geoip_module |
GeoIP 变量 |
MaxMind 库 |
--with-http_sub_module |
响应字符串替换 |
- |
--with-http_dav_module |
WebDAV 支持 |
- |
--with-http_flv_module |
FLV 伪流媒体 |
- |
--with-http_mp4_module |
MP4 伪流媒体 |
- |
--with-http_gunzip_module |
解压 gzip 响应 |
zlib |
--with-http_gzip_static_module |
发送预压缩 .gz 文件 |
zlib |
--with-http_auth_request_module |
子请求授权 |
- |
--with-http_random_index_module |
随机索引文件 |
- |
--with-http_secure_link_module |
安全链接 |
- |
--with-http_degradation_module |
降级支持 |
- |
--with-http_slice_module |
请求分片 |
- |
--with-http_stub_status_module |
状态信息 |
- |
--with-http_perl_module |
嵌入 Perl |
Perl 环境 |
HTTP 模块禁用参数 (--without-*)
默认启用的模块可通过以下参数禁用:
| 参数 |
说明 |
--without-http_charset_module |
禁用字符集模块 |
--without-http_gzip_module |
禁用 gzip 压缩 |
--without-http_ssi_module |
禁用 SSI |
--without-http_userid_module |
禁用用户标识 |
--without-http_access_module |
禁用访问控制 |
--without-http_auth_basic_module |
禁用基础认证 |
--without-http_mirror_module |
禁用镜像 |
--without-http_autoindex_module |
禁用自动索引 |
--without-http_geo_module |
禁用 Geo 模块 |
--without-http_map_module |
禁用 Map 模块 |
--without-http_split_clients_module |
禁用客户端分割 |
--without-http_referer_module |
禁用 Referer |
--without-http_rewrite_module |
禁用 URL 重写 |
--without-http_proxy_module |
禁用代理 |
--without-http_fastcgi_module |
禁用 FastCGI |
--without-http_uwsgi_module |
禁用 uwsgi |
--without-http_scgi_module |
禁用 SCGI |
--without-http_grpc_module |
禁用 gRPC |
--without-http_memcached_module |
禁用 Memcached |
--without-http_limit_conn_module |
禁用连接限制 |
--without-http_limit_req_module |
禁用请求限制 |
--without-http_empty_gif_module |
禁用空 GIF |
--without-http_browser_module |
禁用浏览器检测 |
--without-http_upstream_hash_module |
禁用 Hash 负载均衡 |
--without-http_upstream_ip_hash_module |
禁用 IP Hash |
--without-http_upstream_least_conn_module |
禁用最少连接 |
--without-http_upstream_random_module |
禁用随机 |
--without-http_upstream_keepalive_module |
禁用 Keepalive |
--without-http_upstream_zone_module |
禁用共享内存 |
--without-http |
禁用整个 HTTP 服务器 |
Mail 模块参数
| 参数 |
说明 |
--with-mail |
启用邮件代理服务器 |
--with-mail_ssl_module |
邮件代理 SSL 支持 |
--without-mail_pop3_module |
禁用 POP3 |
--without-mail_imap_module |
禁用 IMAP |
--without-mail_smtp_module |
禁用 SMTP |
Stream 模块参数(TCP/UDP 代理)
| 参数 |
说明 |
--with-stream |
启用 TCP/UDP 流模块 |
--with-stream_ssl_module |
流模块 SSL 支持 |
--with-stream_realip_module |
PROXY 协议地址修改 |
--with-stream_geoip_module |
流模块 GeoIP 支持 |
--with-stream_ssl_preread_module |
提取 ClientHello 信息 |
--without-stream_limit_conn_module |
禁用连接限制 |
--without-stream_access_module |
禁用访问控制 |
--without-stream_geo_module |
禁用 Geo 模块 |
--without-stream_map_module |
禁用 Map 模块 |
--without-stream_split_clients_module |
禁用客户端分割 |
--without-stream_return_module |
禁用 Return 模块 |
--without-stream_set_module |
禁用 Set 模块 |
--without-stream_upstream_hash_module |
禁用 Hash 负载均衡 |
--without-stream_upstream_ip_hash_module |
禁用 IP Hash |
--without-stream_upstream_least_conn_module |
禁用最少连接 |
--without-stream_upstream_random_module |
禁用随机 |
--without-stream_upstream_zone_module |
禁用共享内存 |
其他编译参数
| 参数 |
说明 |
--with-threads |
启用线程池 |
--with-file-aio |
启用异步文件 I/O |
--with-debug |
启用调试日志 |
--with-compat |
动态模块兼容性 |
--add-module=path |
启用外部静态模块 |
--add-dynamic-module=path |
启用外部动态模块 |
--with-cc=path |
设置 C 编译器 |
--with-cc-opt=parameters |
追加 CFLAGS |
--with-ld-opt=parameters |
追加链接参数 |
--with-cpu-opt=cpu |
针对特定 CPU 构建 |
--with-pcre=path |
指定 PCRE 源码路径 |
--with-pcre-jit |
启用 PCRE JIT |
--with-zlib=path |
指定 zlib 源码路径 |
--with-openssl=path |
指定 OpenSSL 源码路径 |
--with-google_perftools_module |
性能分析支持 |
5. 依赖库说明
| 库 |
用途 |
必需模块 |
| OpenSSL |
SSL/TLS 支持 |
http_ssl, mail_ssl, stream_ssl, http_v3 |
| PCRE |
正则表达式支持 |
http_rewrite |
| zlib |
gzip 压缩 |
http_gzip |
| libxml2 & libxslt |
XML 转换 |
http_xslt |
| libgd |
图像处理 |
http_image_filter |
| MaxMind |
GeoIP 功能 |
http_geoip, stream_geoip |
6. 编译示例
基础编译
./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
完整功能编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module \
--with-threads \
--with-file-aio \
--with-debug \
--with-pcre-jit \
--with-openssl=../openssl-3.0.0
动态模块编译
# 编译主程序
./configure --prefix=/usr/local/nginx --with-compat
make
make install
# 编译动态模块(单独)
./configure --prefix=/usr/local/nginx --with-compat --add-dynamic-module=/path/to/module
make modules
cp objs/ngx_*.so /usr/local/nginx/modules/
7. 验证安装
# 检查版本
nginx -v
# 检查编译参数
nginx -V
# 测试配置
nginx -t
# 启动服务
nginx
# 或使用 systemd
systemctl start nginx
systemctl enable nginx
systemctl status nginx