一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 如何通过源码编译安装并定制模块

时间:2026-09-04 19:35:47 编辑:袖梨 来源:一聚教程网

源码编译安装Nginx是最可靠方式,支持模块精控、路径自定义和版本精准管理;需装齐GCC、make、PCRE、OpenSSL、zlib开发包,下载最新稳定版源码,配置所需模块后执行make -j $(nproc) && sudo make install,并用nginx -V验证。

源码编译安装 Nginx 是实现模块精控、路径自定义和版本精准管理的最可靠方式。它不依赖系统包管理器,避免版本滞后或模块冗余,特别适合生产环境、安全合规场景或需集成第三方模块(如 Lua、headers-more)的项目。

装齐基础依赖,确保 configure 能跑通

缺少任一关键库,./configure 会直接报错退出。必须安装:

  1. GCC 和 make:CentOS/RHEL 执行 yum groupinstall "Development Tools" -y;Ubuntu/Debian 执行 apt-get update && apt-get install build-essential -y
  2. PCRE 开发包:支持正则匹配(rewrite、location 等),CentOS 用 yum install pcre-devel -y,Ubuntu 用 apt-get install libpcre3-dev -y
  3. OpenSSL 开发包:启用 HTTPS 和 TLS 功能,对应命令为 openssl-devel(RHEL系)或 libssl-dev(Debian系)
  4. zlib 开发包:支撑 gzip 压缩,命令为 zlib-develzlib1g-dev

下载解压源码,选对最新稳定版

推荐从 nginx.org 正式 获取稳定版(如 nginx-1.30.0.tar.gz),避免镜像源篡改或版本混杂:

  1. 进入临时目录:cd /tmp
  2. 下载并解压:wget https://www.php.cn/link/9926b3ed9e0bc20b2ed7f32711b8b45fnginx-1.30.0.tar.gz && tar -zxvf nginx-1.30.0.tar.gz
  3. 进入源码目录:cd nginx-1.30.0

配置模块开关,按需启用或禁用

./configure 是核心环节,决定最终二进制的功能边界。常见组合示例:

  1. 必启 HTTPS 和 HTTP/2:--with-http_ssl_module --with-http_v2_module
  2. 增强运维能力:--with-http_stub_status_module(暴露 /status 接口)、--with-http_realip_module(解析 X-Forwarded-For)
  3. 静态资源优化:--with-http_gzip_static_module(服务预压缩 .gz 文件)
  4. 精简体积(可选):--without-http_scgi_module --without-http_uwsgi_module --without-mail_pop3_module
  5. 指定安装路径与运行身份:--prefix=/usr/local/nginx --user=www --group=www

执行完整命令示例:

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_realip_module --with-http_gzip_static_module

编译安装并验证结果

确认 configure 成功后(末尾显示 “configuration summary”),执行:

  1. 并行编译加速(利用全部 CPU 核心):make -j $(nproc)
  2. 安装到目标路径:sudo make install
  3. 检查安装结果:/usr/local/nginx/sbin/nginx -V(查看编译参数是否生效)
  4. 启动并测试:/usr/local/nginx/sbin/nginx,然后访问服务器 IP,应看到默认欢迎页

若需 systemd 管理,可手写 /etc/systemd/system/nginx.service,指定 ExecStartPIDFile 路径,再 systemctl daemon-reload && systemctl enable --now nginx

热门栏目