离线物理机源码部署nginx生产服务需严格遵循“离线可重现”原则:提前准备编译工具链、nginx源码、开发库、自签名证书及systemd配置;在目标机依次安装依赖、编译安装、部署证书与服务;上线前须绑定内网ip监听、白名单代理、权限分离、防火墙固化,并通过本地curl、openssl、ps、ss完成四项验证。

在完全隔离的物理机上用源码部署 Nginx 生产服务,核心是“离线可重现”——所有依赖、编译产物、配置、证书都必须提前准备就绪,不依赖任何网络连接或外部仓库。
一、离线环境下的完整物料清单
你需在有网机器上提前打包以下 5 类内容,拷贝至目标物理机:
-
基础编译工具链:gcc、make、glibc-devel(CentOS)或 build-essential(Ubuntu),以 RPM 或 DEB 包形式下载,含全部依赖树(可用
yumdownloader --resolve或apt download --download-only) - Nginx 源码包:从 nginx.org 下载指定稳定版(如 nginx-1.30.0.tar.gz),不建议用镜像站或第三方源
- 关键开发库离线包:pcre-devel、zlib-devel、openssl-devel(CentOS)或 libpcre3-dev、zlib1g-dev、libssl-dev(Ubuntu)——这些是启用 HTTPS、gzip、正则等功能的硬依赖
-
预生成的可信自签名证书:使用 OpenSSL 在离线环境生成内部 CA + 服务证书(域名可为
app.internal),证书与私钥一起打包,不依赖 Let’s Encrypt -
systemd 服务模板与最小化配置骨架:含
nginx.service文件、nginx.conf主配置、conf.d/下空目录结构,全部路径按生产规范预设(如/usr/local/nginx)
二、物理机上的无网安装流程
登录目标物理机后,按顺序执行(无需 root 外网访问权限):
- 安装离线依赖包:
sudo rpm -ivh *.rpm(CentOS)或sudo dpkg -i *.deb(Ubuntu),遇到依赖缺失时补全对应包再重试 - 解压源码并进入目录:
tar -zxvf nginx-1.30.0.tar.gz && cd nginx-1.30.0 - 执行离线安全编译配置(禁用不必要模块,减少攻击面):
./configure --prefix=/usr/local/nginx \<br> --with-http_ssl_module \<br> --with-http_v2_module \<br> --with-http_gzip_static_module \<br> --without-mail_pop3_module \<br> --without-mail_imap_module \<br> --without-mail_smtp_module \<br> --without-http_uwsgi_module \<br> --without-http_scgi_module
- 编译安装:
make -j$(nproc) && sudo make install - 拷贝预生成证书到
/usr/local/nginx/conf/ssl/,设置权限:sudo chmod 600 /usr/local/nginx/conf/ssl/*.key - 启用 systemd 服务:
sudo cp nginx.service /etc/systemd/system/ && sudo systemctl daemon-reload
三、生产就绪的关键加固项
源码安装只是起点,真正上线前必须完成以下隔离与防护动作:
-
监听地址绑定:在
nginx.conf中明确写死内网 IP(如listen 192.168.10.5:443 ssl),禁用0.0.0.0或未限定 IP 的监听,防止误暴露 -
反向代理目标白名单:所有
proxy_pass必须指向内网固定 IP + 端口(如https://192.168.10.100:8443),禁用变量或域名解析 -
日志与权限分离:创建专用用户
nginx-prod,让 worker 进程以该用户运行;日志目录/var/log/nginx-prod/所属组设为adm,便于审计但不可写入 -
防火墙策略固化:用
iptables或nftables仅放行业务必需端口(如 443),显式拒绝其他所有入向连接,规则保存至配置文件并开机加载 -
启动自检脚本:部署后首次启动前,运行校验脚本检查:
nginx -t配置语法、证书有效期、端口占用、SSL 模块加载状态、worker 用户权限
四、验证与交付要点
不连外网,不代表不能验证。可通过本地 curl 或内网其他机器测试:
- 用
curl -k https://192.168.10.5检查是否返回预期响应头(含Server: nginx和自定义X-Environment: prod) - 检查证书链:
openssl s_client -connect 192.168.10.5:443 -servername app.internal 2>/dev/null | openssl x509 -noout -text | grep "Issuer|Subject|DNS" - 确认进程归属:
ps aux | grep nginx | grep -v grep | awk '{print $1}' | sort -u应只输出nginx-prod - 查看监听状态:
ss -tlnp | grep :443,确认仅绑定内网 IP,且 PID 属于 nginx 主进程











