麒麟ARM服务器运维-升级Nginx版本

前言

Nginx 1.22.0漏扫发现很多漏洞,这里考虑升级后的配置兼容性建议升级到1.29.8

这个版本经过了充分测试,适合生产环境,修复了之前版本已知的高危漏洞。

服务器信息

系统名称

1
cat /etc/.productinfo

比如银河麒麟系统V10

Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524

查看服务器架构

1
uname -m
  • 如果输出是 x86_64,则表示服务器是 x86 架构。
  • 如果输出是 aarch64,则表示服务器是 ARM 架构(ARM 64位)。
  • 如果输出是 armv7l,则表示服务器是 ARM 架构(ARM 32位)。

安装Nginx

安装

本地下载Nginx后上传

1
https://nginx.org/download/nginx-1.29.8.tar.gz

安装依赖

1
yum install -y pcre pcre-devel zlib zlib-devel gcc-c++ openssl openssl-devel

解压

1
2
tar -zxvf nginx-1.29.8.tar.gz
cd nginx-1.29.8

编译配置

1
2
3
4
5
6
7
8
9
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-poll_module --with-threads --with-file-aio \
--with-http_v2_module --with-http_realip_module \
--with-stream --with-stream_ssl_module --with-stream_realip_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module

编译。

1
make -j"$(getconf _NPROCESSORS_ONLN)"

不要直接 make install 覆盖全量目录。

我们只替换 nginx 二进制并保持 yum 的配置与目录不变。

编译完成后先本地自检新二进制。

1
2
./objs/nginx -V
./objs/nginx -t -c /usr/local/nginx/conf/nginx.conf

将新二进制覆盖到 /usr/sbin/nginx

1
2
3
4
5
6
7
8
9
10
11
# 备份之前的文件
sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak

sudo systemctl stop nginx
sudo pkill -9 nginx
# 确认进程停止
ps -ef | grep nginx
sudo cp -a ./objs/nginx /usr/local/nginx/sbin/nginx
sudo chmod 755 /usr/local/nginx/sbin/nginx
# 启动
sudo systemctl start nginx

如果替换不了文件

cp: cannot create regular file ‘/usr/sbin/nginx’: Text file busy

说明 还有进程在执行 /usr/sbin/nginx(哪怕你 systemctl stop 了也可能残留 master/worker,或者有别的 unit/守护在拉起)。

先把占用者找出来并杀掉

1
2
3
sudo systemctl stop nginx

ps -ef | grep nginx

如果还能看到 nginx 进程:

1
2
3
4
sudo pkill -9 nginx

# 再确认一次
ps -ef | grep nginx

验证新版本是否生效。

1
2
nginx -v
nginx -V

关于动态模块

如果你使用了 --add-dynamic-module 编译了第三方模块,objs 目录下还会生成 .so 后缀的动态库文件。

这种情况下,你也需要将这些 .so 文件复制到安装目录的 modules/ 文件夹中,否则 Nginx 启动时会因为找不到模块而报错。

配置

查找安装路径

1
whereis nginx

查看配置信息

1
2
cd  /usr/local/nginx/sbin
./nginx -t

添加软连接

1
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

查看Nginx信息

1
nginx -V

这时就可以这样检测了

1
nginx -t

注册服务

在 Linux 上,将 Nginx 配置为一个服务以便它可以作为系统服务启动、停止和管理,通常需要创建一个 systemd 服务文件。

以下是如何为编译安装的 Nginx 创建一个 systemd 服务文件的步骤:

1. 创建 Nginx 服务文件

/etc/systemd/system/ 目录下创建一个新的服务文件,例如 nginx.service

1
sudo vi /etc/systemd/system/nginx.service

2. 编辑服务文件内容

将以下内容粘贴到 nginx.service 文件中。

注意,根据你的 Nginx 安装路径调整 ExecStartExecReload 的路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3. 启用并启动 Nginx 服务

保存并关闭文件后,使用以下命令重新加载 systemd 配置,启动 Nginx 服务,并设置开机自启动:

1
2
3
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx

4. 检查服务状态

你可以使用以下命令检查 Nginx 服务的状态:

1
sudo systemctl status nginx

5. 常用操作

启动服务

1
sudo systemctl start nginx

停止服务

1
sudo systemctl stop nginx

重启服务

1
sudo systemctl restart nginx

重新加载配置

1
sudo systemctl reload nginx

查看服务日志

1
sudo journalctl -u nginx

添加配置

1
cd /usr/local/nginx/conf

修改根配置

1
vi nginx.conf

http内,server同级添加

1
include /etc/nginx/conf.d/*.conf;

创建目录

1
mkdir -p /etc/nginx/conf.d/

添加配置

1
2
cd /etc/nginx/conf.d/
vi _localhost_80.conf

内容

1
2
3
4
5
6
server {  
listen 80;
server_name localhost;
index index.html;
root /data/wwwjarapi/schoolfile/static;
}

重启Nginx

1
systemctl restart nginx

查看是否生效

1
lsof -i:80

访问测试

1
2
3
curl http://127.0.0.1/test.txt
curl http://172.26.69.13/test.txt
curl http://localhost/test.txt