nginx源码编译升级

奥黛丽·逐爱者
2026-06-24 / 0 评论 / 8 阅读 / 正在检测是否收录...

检查当前版本
nginx 不在系统 PATH 中,需要指定完整路径执行

# 您的 nginx 在 /usr/local/nginx/sbin/ 目录下
# 需要用完整路径执行
/usr/local/nginx/sbin/nginx -v

修复步骤
第一步:确认当前版本

# 查看当前 NGINX 版本
/usr/local/nginx/sbin/nginx -v

# 同时查看编译参数(升级时需要)
/usr/local/nginx/sbin/nginx -V

第二步:升级到安全版本
a 备份配置文件和二进制

cp -r /usr/local/nginx/conf /usr/local/nginx/conf.bak.$(date +%Y%m%d)
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old.$(date +%Y%m%d)

确认当前进程PID(后续热升级用)

cat /usr/local/nginx/logs/nginx.pid

b 下载并编译新版本

cd /usr/local/src

# 下载 NGINX 1.30.1
wget https://nginx.org/download/nginx-1.30.1.tar.gz
tar -zxvf nginx-1.30.1.tar.gz
cd nginx-1.30.1

# 使用与原版本完全相同的编译参数
./configure \
    --prefix=/usr/local/nginx \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-openssl=/tmp/nginx/openssl-1.1.1d

# 编译(不要 make install!)
make -j$(nproc)

c 热升级(不中断服务)

# 1. 替换二进制文件
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp ./objs/nginx /usr/local/nginx/sbin/nginx

# 2. 验证新版本
/usr/local/nginx/sbin/nginx -v
# 应该显示 nginx/1.30.1

# 3. 测试配置文件
/usr/local/nginx/sbin/nginx -t

# 4. 热升级:发送 USR2 启动新主进程
kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)

# 5. 等待几秒,确认新进程启动
ps aux | grep nginx
# 应该看到新旧两组 worker 进程

# 6. 优雅关闭旧进程
kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)

d 验证升级成功

# 确认版本
/usr/local/nginx/sbin/nginx -v
# 输出应为: nginx/1.30.1

# 确认服务正常
curl -I http://localhost/
# 或访问您的网站测试

# 查看进程
ps aux | grep nginx

e 检查漏洞配置

grep -rnE 'rewrite\s+.*\?.*\$[0-9]' /usr/local/nginx/conf/

0

评论 (0)

取消