Nginx版本升级
生产环境的 Nginx 需要升级,由于之前是通过编译安装的,这边升级的时候整理了升级步骤。
#!/bin/bash
# 颜色定义
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PLAIN="\033[0m"
# 进度提示函数
info() {
echo -e "${BLUE}=== $1 ===${PLAIN}"
}
success() {
echo -e "${GREEN}=== $1 ===${PLAIN}"
}
warning() {
echo -e "${YELLOW}=== $1 ===${PLAIN}"
}
error() {
echo -e "${RED}=== $1 ===${PLAIN}"
}
# 参数化Nginx升级脚本
NGINX_VERSION="nginx-1.28.0.tar.gz"
SOURCE_URL="/home/$NGINX_VERSION"
OLD_DIR="${1:-/userh9/apps/nginx}" # 默认是/userh9/apps/nginx目录
NEW_DIR="${OLD_DIR}2025"
# 检查参数
if [ ! -d "$OLD_DIR" ]; then
error "指定的旧目录 $OLD_DIR 不存在!"
exit 1
fi
# 安装依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
# 备份旧版本
info "开始备份旧版本目录"
cp -p -r "$OLD_DIR" "$NEW_DIR" || { error "备份失败"; exit 1; }
success "旧版本目录备份完成"
# 显示目录信息
echo -e "${YELLOW}旧版本目录:${PLAIN} $OLD_DIR"
echo -e "${YELLOW}新版本目录:${PLAIN} $NEW_DIR"
echo "----------------------------------------"
# 获取旧版本模块
info "提取旧版本编译模块参数"
OLD_MODULES=$("$OLD_DIR/sbin/nginx" -V 2>&1 | grep -oP 'with-\K[^ ]+' | sed 's/^/--with-/')
echo -e "${YELLOW}复用模块:${PLAIN} $OLD_MODULES"
echo "----------------------------------------"
# 解压编译新版本
info "开始解压并编译新版本"
cd /home || { error "进入/home目录失败"; exit 1; }
mkdir nginx
tar xf $NGINX_VERSION -C nginx --strip-components 1|| { error "源码解压失败"; exit 1; }
cd nginx || { error "进入源码目录失败"; exit 1; }
info "配置编译参数"
./configure --prefix=$NEW_DIR $OLD_MODULES || { error "配置失败"; exit 1; }
info "开始编译"
make || { error "编译失败"; exit 1; }
success "新版本编译安装完成"
echo "----------------------------------------"
### 这边可以不用make install 直接make就行了,把/home/nginx/objs/的nginx二进制文件copy到$OLD_DIR/sbin/下
# 版本验证
info "版本信息"
echo -e "${YELLOW}新版本:${PLAIN} "
"$NEW_DIR/sbin/nginx" -v 2>&1
echo "----------------------------------------"
# 隐藏版本号配置
info "配置隐藏版本号"
if ! grep -q 'server_tokens off;' "$OLD_DIR/conf/nginx.conf"; then
sed -i '/^http {/a \ server_tokens off;' "$OLD_DIR/conf/nginx.conf"
success "已添加 server_tokens off 配置"
else
echo "server_tokens off 配置已存在,跳过"
fi
echo "----------------------------------------"
# 覆盖旧版本
info "覆盖旧版本"
mv $OLD_DIR/sbin/nginx $OLD_DIR/sbin/nginx.old
cp $NEW_DIR/sbin/nginx $OLD_DIR/sbin/nginx
echo "----------------------------------------"
# 检查新配置
info "验证配置文件"
"$OLD_DIR/sbin/nginx" -t || { error "配置文件有误,请修复后重试"; exit 1; }
success "配置文件验证通过"
echo "----------------------------------------"
# 检查新配置
info "重启服务"
systemctl restart nginx
systemctl status nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
配置system管理
# 编辑system配置
vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/userh9/apps/nginx/sbin/nginx -c /userh9/apps/nginx/conf/nginx.conf
ExecReload=/userh9/apps/nginx/sbin/nginx -s reload
ExecStop=/userh9/apps/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 启动服务
systemctl daemon-reload
systemctl restart nginx
systemctl status nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 2026/05/31, 03:30:34