源码编译安装Nginx可精准控制版本、模块和环境,适用于启用第三方模块、定制OpenSSL或适配特殊架构;但需手动处理依赖、服务配置与升级。

在 Linux 系统中源码编译安装 Nginx,能让你精准控制版本、模块和运行环境,特别适合需要启用第三方模块(如 nginx-rtmp-module、lua-nginx-module)、定制 OpenSSL 版本或适配特殊架构的场景。但要注意:它不自动处理依赖、不生成 systemd 服务文件、也不像包管理器那样方便升级——优点是灵活,代价是需手动维护。
一、编译前准备:系统依赖与源码获取
确保系统已安装基础编译工具和依赖库:
- 必备工具:gcc、g++、make、autoconf、automake、libtool
- 核心依赖:zlib(压缩支持)、OpenSSL(HTTPS)、PCRE(正则匹配,用于 rewrite 等指令)
-
推荐安装命令(CentOS/RHEL):
yum groupinstall "Development Tools" && yum install -y zlib-devel openssl-devel pcre-devel -
Debian/Ubuntu 对应命令:
apt update && apt install -y build-essential zlib1g-dev libssl-dev libpcre3-dev -
下载源码:从 nginx.org 获取稳定版(如
nginx-1.24.0.tar.gz),或使用 wget 直接拉取:wget https://nginx.org/download/nginx-1.24.0.tar.gz
二、配置与编译:指定路径、模块与参数
解压后进入目录,执行 ./configure 是关键一步。它不真正编译,而是生成 Makefile 并检查依赖是否齐全。
-
最小可用配置示例:
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf -
常用增强选项:
-
--with-http_ssl_module:启用 HTTPS(必须有 OpenSSL 开发包) -
--with-http_v2_module:启用 HTTP/2(需 OpenSSL ≥1.0.2) -
--with-http_realip_module:获取真实客户端 IP(常用于反向代理后) -
--add-module=../ngx_cache_purge:添加第三方模块(路径需为绝对或相对当前目录) -
--with-openssl=../openssl-3.0.12:指定自定义 OpenSSL 源码路径(静态链接)
-
-
执行编译安装:
make && sudo make install。注意:make 不需要 root 权限,install 阶段才需要写入目标目录权限。
三、首次启动与基础验证
安装完成后,Nginx 可执行文件位于 /usr/local/nginx/sbin/nginx(按上面 configure 路径示例)。
-
检查配置语法:
/usr/local/nginx/sbin/nginx -t,输出success表示无误 -
启动服务:
/usr/local/nginx/sbin/nginx -
查看进程:
ps aux | grep nginx,应看到 master + worker 进程 -
访问验证:用 curl 或浏览器访问服务器 IP,默认页面显示
Welcome to nginx!即成功 -
停止/重载:
/usr/local/nginx/sbin/nginx -s stop(快速终止),-s reload(平滑重载配置)
四、补充建议:服务化与日常维护
源码安装默认不集成到系统服务管理,建议手动补全,提升可用性:
-
创建 systemd 服务文件:
/etc/systemd/system/nginx.service,内容包含 [Unit]、[Service]、[Install] 三段,指定 ExecStart、Restart 等项 -
重载并启用服务:
systemctl daemon-reload && systemctl enable --now nginx -
日志路径注意:默认日志在
/usr/local/nginx/logs/,可修改nginx.conf中error_log和access_log指向 /var/log/nginx/ 方便统一管理 -
升级提示:再次编译新版本时,建议保留旧配置目录(如备份
/usr/local/nginx/conf/),安装后替换配置并nginx -t && nginx -s reload
源码安装不是黑盒操作,理解每一步的作用比记住命令更重要。配置阶段决定功能边界,编译阶段暴露依赖问题,启动后验证才是闭环。只要路径清晰、依赖到位、权限合理,整个过程并不复杂但容易忽略细节。










