离线安装Nginx核心是普通用户通过源码编译完成,无需root权限:先离线准备GCC、PCRE、Zlib、OpenSSL四类依赖并本地安装,再用--prefix指定用户目录、--with-openssl等参数指向本地源码,执行make && make install后验证版本、配置及启动。

在无公网的 Linux 环境中离线安装 Nginx,核心是“提前准备 + 源码编译”,不依赖 yum/apt,也不需要 root 权限(普通用户可完成)。关键在于把 Nginx 及其运行必需的底层依赖一并带入内网,并按顺序编译安装。
一、确认并准备四类必要组件
离线安装不是只下个 nginx 包就行,它依赖四个基础组件,缺一不可:
-
GCC 工具链:必须有 gcc 和 g++,用于编译所有源码。若系统未预装,需下载对应发行版的 rpm 包(如 CentOS 7 的 gcc-4.8.5、glibc-devel、kernel-headers 等),统一上传后执行:
rpm -Uvh *.rpm --nodeps --force -
PCRE 库:Nginx 解析 location、rewrite 等正则规则必需。推荐 pcre-8.45 或 pcre2-10.44(注意:pcre2 与传统 pcre API 不兼容,Nginx 官方仍主推 pcre v8.x)。解压后进入目录执行:
./configure && make && make install -
Zlib 库:支持 gzip 压缩。zlib-1.3.1 是当前稳定版本。同样解压后:
./configure && make && make install -
OpenSSL 库:启用 HTTPS 和 HTTP/2 必需。建议 openssl-3.0.20(兼容性好,安全性高)。进入源码目录执行:
./config && make && make install(默认装到 /usr/local/ssl)
二、配置 Nginx 编译参数(非 root 用户友好)
将 nginx-1.26.3.tar.gz 解压后进入目录,用 ./configure 指定本地路径和模块。重点如下:
- 用
--prefix=/home/yourname/nginx把 Nginx 装到用户家目录,无需 sudo - 显式指向你本地解压好的依赖源码:
--with-openssl=../openssl-3.0.20 --with-pcre=../pcre-8.45 --with-zlib=../zlib-1.3.1 - 启用常用模块:
--with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream(含四层代理支持) - 若跳过 pcre/zlib 编译(系统已自带可用库),可省略对应
--with-pcre等参数,但务必验证pcre-config --version和zlib.pc是否存在
三、编译安装与快速验证
执行三步命令即可完成安装:
-
make—— 编译过程会自动链接你指定的 OpenSSL、PCRE、zlib 源码,生成二进制文件 -
make install—— 将文件复制到--prefix指定路径(如 /home/yourname/nginx) - 验证:
/home/yourname/nginx/sbin/nginx -v查版本;/home/yourname/nginx/sbin/nginx -t测试配置;/home/yourname/nginx/sbin/nginx启动服务
启动后,默认监听 80 端口,可通过 curl http://localhost 或本机浏览器访问测试页。
四、补充说明与避坑点
常见问题其实都集中在依赖路径和权限上:
- 报错
./configure: error: the HTTP rewrite module requires the PCRE library?→ 不是没装 pcre,而是 configure 找不到 pcre.h 或 libpcre.so,确认是否执行了make install(而非仅 make),或尝试加--with-pcre指向源码目录 - 启动时报
unknown directive "stream"?→ 编译时漏了--with-stream,重跑 configure + make(无需重新 make install) - HTTPS 配置后 curl 提示 SSL handshake failed?→ 检查 OpenSSL 是否成功安装(
openssl version应输出 3.0.20),且 Nginx configure 中--with-openssl指向的是源码目录,不是安装后的 /usr/local/ssl - 想开机自启或作为系统服务?→ 普通用户无法注册 systemd service,但可用 crontab @reboot 或写 shell 脚本配合 supervisor 管理进程


















