【Docker容器中的nginx平滑升级】
Docker容器中的nginx平滑升级nginx平滑升级
·
Docker容器中的nginx平滑升级
- nginx平滑升级
- 漏洞描述
- 开始升级
- 进入安装有nginx的docker容器
- 先看下当前nginx版本,很明显版本过低了,在0.6.18-1.20.0之间,升级它
- 备份当前nginx二进制文件,注意自己安装路径,我的是自己编译安装自己指定路径
- 使用`wget http://nginx.org/download/nginx-1.20.2.tar.gz`把最新稳定版本下载下来,或者自己下载后传到服务器再使用docker cp到容器
- 解压
- 进入 nginx-1.20.2
- 注意`# 编译选项与旧版本的编译选项要一直,可以先用nginx -V 查看编译选项`
- 根据之前版本的编译选项,我们配置一下
- 接下来make一下,这里只`make` 不需要make install
- 上述完成以后,会在当前我解压缩nginx的objs下面产生一个nginx二进制文件
- 复制新版本的nginx二进制文件到就二进制文件路径,覆盖它,如果cp不行可用mv覆盖
- 重启docker容器,重新启动nginx就可以了
nginx平滑升级
博主所在公司最近在扫描漏洞,很不幸,收到一个nginx安全漏洞,故写一下我是如何解决的吧,如果你不是部署在docker里也可以通用的。
漏洞描述
看起来很简单,我们只需要升级一下nginx版本,因为这个是版本带来的BUG
开始升级
进入安装有nginx的docker容器
[root@localhost ~]# docker exec -it nginx bash
先看下当前nginx版本,很明显版本过低了,在0.6.18-1.20.0之间,升级它
[root@b656bb053512 /]# nginx -v
nginx version: nginx/1.16.0
备份当前nginx二进制文件,注意自己安装路径,我的是自己编译安装自己指定路径
[root@b656bb053512 /]# ll /usr/sbin/nginx
-rwxr-xr-x. 1 root root 9307840 Dec 7 09:08 /usr/sbin/nginx
[root@b656bb053512 /]# mv /usr/sbin/nginx /usr/sbin/nginx.bk
[root@b656bb053512 /]# cd /usr/sbin/
[root@b656bb053512 sbin]# ll
-rwxr-xr-x. 1 root root 9307840 Dec 7 09:08 /usr/sbin/nginx.bk
使用wget http://nginx.org/download/nginx-1.20.2.tar.gz
把最新稳定版本下载下来,或者自己下载后传到服务器再使用docker cp到容器
[root@b656bb053512 /]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
--2021-12-07 17:21:01-- http://nginx.org/download/nginx-1.20.2.tar.gz
正在解析主机 nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5702::6, ...
正在连接 nginx.org (nginx.org)|52.58.199.22|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1062124 (1.0M) [application/octet-stream]
正在保存至: “nginx-1.20.2.tar.gz”
100%[=======================================================================================================================================================================================================>] 1,062,124 766KB/s 用时 1.4s
2021-12-07 17:21:03 (766 KB/s) - 已保存 “nginx-1.20.2.tar.gz” [1062124/1062124])
解压
[root@b656bb053512 /]# tar xf nginx-1.20.2.tar.gz
进入 nginx-1.20.2
[root@b656bb053512 /]# cd nginx-1.20.2
[root@b656bb053512 nginx-1.20.2]# ll
total 792
-rw-r--r--. 1 1001 1001 312251 Nov 16 14:44 CHANGES
-rw-r--r--. 1 1001 1001 476577 Nov 16 14:44 CHANGES.ru
-rw-r--r--. 1 1001 1001 1397 Nov 16 14:44 LICENSE
-rw-r--r--. 1 1001 1001 49 Nov 16 14:44 README
drwxr-xr-x. 6 1001 1001 4096 Dec 7 09:22 auto
drwxr-xr-x. 2 1001 1001 168 Dec 7 09:22 conf
-rwxr-xr-x. 1 1001 1001 2590 Nov 16 14:44 configure
drwxr-xr-x. 4 1001 1001 72 Dec 7 09:22 contrib
drwxr-xr-x. 2 1001 1001 40 Dec 7 09:22 html
drwxr-xr-x. 2 1001 1001 21 Dec 7 09:22 man
drwxr-xr-x. 9 1001 1001 91 Dec 7 09:22 src
注意# 编译选项与旧版本的编译选项要一直,可以先用nginx -V 查看编译选项
[root@b656bb053512 nginx-1.20.2]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module
[root@b656bb053512 nginx-1.20.2]#
根据之前版本的编译选项,我们配置一下
[root@d1af8b62b986 nginx-1.20.2]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module
checking for OS
+ Linux 3.10.0-1127.13.1.el7.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
......
......
......
接下来make一下,这里只make
不需要make install
[root@d1af8b62b986 nginx-1.20.2]# make
make -f objs/Makefile
make[1]: Entering directory `/nginx-1.20.2'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_log.o \
src/core/ngx_log.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_palloc.o \
src/core/ngx_palloc.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_array.o \
src/core/ngx_array.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_list.o \
src/core/ngx_list.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_hash.o \
......
......
......
上述完成以后,会在当前我解压缩nginx的objs下面产生一个nginx二进制文件
[root@b656bb053512 nginx-1.20.2]# cd objs/
[root@b656bb053512 objs]# ll
total 9308
-rw-r--r--. 1 root root 62235 Dec 7 09:04 Makefile
-rw-r--r--. 1 root root 19458 Dec 7 09:04 autoconf.err
-rwxr-xr-x. 1 root root 9307840 Dec 7 09:05 nginx
-rw-r--r--. 1 root root 5500 Dec 7 09:05 nginx.8
-rw-r--r--. 1 root root 9559 Dec 7 09:04 ngx_auto_config.h
-rw-r--r--. 1 root root 657 Dec 7 09:04 ngx_auto_headers.h
-rw-r--r--. 1 root root 10901 Dec 7 09:04 ngx_modules.c
-rw-r--r--. 1 root root 96976 Dec 7 09:05 ngx_modules.o
drwxr-xr-x. 9 root root 91 Dec 7 09:04 src
[root@b656bb053512 objs]#
复制新版本的nginx二进制文件到就二进制文件路径,覆盖它,如果cp不行可用mv覆盖
[root@b656bb053512 objs]# cp nginx /usr/sbin/
[root@b656bb053512 objs]# nginx -v
nginx version: nginx/1.20.2
重启docker容器,重新启动nginx就可以了
更多推荐
已为社区贡献1条内容
所有评论(0)