资讯动态

NGINX 源码编译安装脚本

发布时间:2026/9/11 10:05:18 来源:尧图企业网站定制
依据《NGINX HTTP Server (5th Edition)》第 1 章「Downloading and Installing NGINX」中 *Compiling NGINX from source*、*Downloading and extracting*、*Path options*、*Compiling and installing* 等小节整理。 书中示例版本为 **nginx-1.25.2**截至 2023 年 9 月的最新稳定版默认安装目录为 /usr/local/nginx。---一、安装前置说明源码编译安装 NGINX 通常有三个步骤**配置configure、编译make、安装make install**。配置步骤用于选择编译后不可更改的选项直接影响生成的二进制文件因此需要谨慎对待。四个主要前置依赖为**GCC、PCRE、zlib、OpenSSL**。后三者是库每种都需要安装两个包库本身及其开发源码development headers/sources。如需启用额外模块如 HTTP XSLT 模块还可能需要 LibXML2、LibXSLT 等其他依赖。常见安装失败原因有四类前置依赖缺失或源码路径指定无效、目录无读写权限、configure 找不到依赖文件路径、未正确启用所需模块如 SSL 模块。---二、安装脚本nginx_source_install.sh#!/bin/bash # # NGINX 源码编译安装脚本 # 参考: NGINX HTTP Server (5th Edition), Chapter 1 # 书中示例版本: nginx-1.25.2 # set -e # 任一命令失败即退出 # ---------- 可配置变量 ---------- NGINX_VERSION1.25.2 # NGINX 版本书中示例 SRC_DIR${HOME}/src # 源码存放目录 PREFIX/usr/local/nginx # 安装前缀默认 SBIN_PATH${PREFIX}/sbin/nginx # 可执行文件 CONF_PATH/etc/nginx/nginx.conf # 主配置文件 PID_PATH/var/run/nginx.pid # PID 文件 ERROR_LOG_PATH/var/log/nginx/error.log # 错误日志 HTTP_LOG_PATH/var/log/nginx/access.log # 访问日志 # ---------- 0. 权限检查 ---------- if [ $(id -u) -ne 0 ]; then echo 请以 root 权限运行本脚本安装到 ${PREFIX} 通常需要 root。 exit 1 fi # ---------- 1. 检测并安装 GCC ---------- # 若执行 gcc 返回 gcc: no input files 表示已安装 # 若返回 gcc: command not found 则需要安装。 if ! command -v gcc /dev/null 21; then echo 未检测到 GCC正在安装编译工具链... if command -v apt /dev/null 21; then # apt 与 yum 不仅安装 GCC还会拉取从源码构建应用所需的所有常见依赖 # 代码头文件及其他编译工具 apt update apt install -y gcc make elif command -v yum /dev/null 21; then yum install -y gcc make elif command -v dnf /dev/null 21; then dnf install -y gcc make else echo 未能识别的包管理器请手动安装 GCC 与 make。 exit 1 fi else echo GCC 已安装跳过。 fi # ---------- 2. 安装前置库PCRE / zlib / OpenSSL---------- # 三个库都必须同时安装「库本身」和「开发源码包」 echo 安装 PCRE / zlib / OpenSSL 及其开发包... if command -v apt /dev/null 21; then apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev elif command -v yum /dev/null 21; then # 书中 yum 示例: yum install pcre pcre-level / yum install pcre* yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel elif command -v dnf /dev/null 21; then dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel fi # ---------- 3. 下载并解压源码 ---------- # 从 https://nginx.org/ 获取下载 URL使用 wget 下载 echo 下载并解压 NGINX ${NGINX_VERSION} 源码... mkdir -p ${SRC_DIR} cd ${SRC_DIR} if [ ! -f nginx-${NGINX_VERSION}.tar.gz ]; then wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz fi if [ ! -d nginx-${NGINX_VERSION} ]; then tar zxf nginx-${NGINX_VERSION}.tar.gz fi cd nginx-${NGINX_VERSION} # ---------- 4. 创建运行所需目录 ---------- # 确保 configure 中指定的路径存在且有效并确保放置 NGINX 文件的 # 目录对执行配置与编译脚本的用户具有读写权限 mkdir -p $(dirname ${CONF_PATH}) \ $(dirname ${PID_PATH}) \ $(dirname ${ERROR_LOG_PATH}) \ $(dirname ${HTTP_LOG_PATH}) \ ${PREFIX} # ---------- 5. 配置编译选项 ---------- # configure 会执行一长串系统组件校验并生成 makefile。 # 若配置失败请检查前置依赖并可查看 objs/autoconf.err 获取详细报告。 # 注意选项会随下载版本变化可用 ./configure --help 查看当前版本支持的开关。 echo 配置编译选项 (configure)... ./configure \ --prefix${PREFIX} \ --sbin-path${SBIN_PATH} \ --conf-path${CONF_PATH} \ --pid-path${PID_PATH} \ --error-log-path${ERROR_LOG_PATH} \ --http-log-path${HTTP_LOG_PATH} \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_gzip_static_module # 如 configure 找不到 OpenSSL 库文件可显式指定其路径例如 # ./configure [...] --with-openssl/usr/lib64 # ---------- 6. 编译 ---------- # make 在项目源码目录中执行成功构建应以 # make[1]: leaving directory 项目源码路径 结尾 echo 编译 (make)... make # ---------- 7. 安装 ---------- # make install 必须以 root 权限执行它执行 makefile 的 install 段 # 将二进制与配置文件复制到指定安装目录并创建日志与 HTML 文件目录 echo 安装 (make install)... make install # ---------- 8. 验证 ---------- echo 验证安装结果... ${SBIN_PATH} -v # -V 不仅显示版本还会回显 configure 阶段使用的编译参数 ${SBIN_PATH} -V echo echo NGINX ${NGINX_VERSION} 源码安装完成。 echo 安装目录: ${PREFIX} echo 配置文件: ${CONF_PATH} echo 可执行文件: ${SBIN_PATH} echo echo 常用操作: echo 测试配置: ${SBIN_PATH} -t echo 启动: ${SBIN_PATH} echo 重载: ${SBIN_PATH} -s reload echo echo export PATH$PATH:/usr/local/nginx/sbin/ ~/.bashrc source ~/.bashrc nginx -vNginx的默认systemd服务文件vim /etc/systemd/system/nginx.service#/lib/systemd/system/nginx.service [Unit] DescriptionNGINX Server Aftersyslog.target network-online.target Wantsnetwork-online.target [Service] Typeforking PIDFile/run/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/bin/kill -s QUIT $MAINPID PrivateImptrue PrivateImptrue [Install] WantedBymulti-user.target---三、最简安装方式可选如果不想折腾配置步骤例如仅用于测试或将来会重新编译可以直接不带任何开关执行 configure以下三条命令即可构建并安装一个可用的 NGINXbash./configuremakemake install---四、故障排查要点1. **前置依赖缺失或源码路径无效**这是最常见错误来源。确认 GCC、PCRE、zlib、OpenSSL 及其开发包均已安装。2. **configure 找不到依赖文件**使用与文件路径相关的配置开关显式指定位置例如 --with-openssl/usr/lib64。3. **目录存在且可写**确保放置 NGINX 文件的目录对运行配置与编译脚本的用户具有读写权限且 configure 开关中指定的所有路径都是已存在的有效路径。4. **查看详细错误**configure 过程会生成 objs/autoconf.err 文件其中记录了具体哪一步失败。5. **确认已启用模块**运行 nginx -V 可回显 configure 阶段传入的编译参数若使用了未编译进 NGINX 的模块其启用指令会导致配置错误。---五、说明- 书中说明若未修改配置文件路径与 prefix 选项配置文件默认位于 /usr/local/nginx/conf/nginx.conf若通过包管理器安装则通常位于 /etc/nginx/nginx.conf。- 书中推荐参考官方文档 *Building NGINX from Sources*为日志、https 模块以及 geoip、gzip、zlib、pcre 等库配置正确路径本书编译时采用该文档的标准开关以与主流 Linux 发行版的二进制保持一致。- 上述 Path options 在 stable 版 1.25.2 下有效使用其他版本请先运行 ./configure --help 列出可用开关。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价