Подробная и полная запись плавного обновления nginx

Nginx

Сегодня я неожиданно получил напоминание по электронной почте от Baidu Cloud и обнаружил уязвимость высокого риска. Я так испугался, что быстро зашел в Baidu Cloud, чтобы проверить, оказалось, что в старой версии nginx есть лазейки и ее нужно обновить

Проблема в том, что на сервере запущено много сервисов, как плавно обновиться? Смотри мое шоу дальше, ха-ха

подготовка к первому шагу

1 Просмотрите информацию о текущей версии:

Выполните следующую команду: /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.1.10
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=/usr/local/nginx --with-http_addition_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_dav_module --with-http_v2_module

Он показывает, что текущая версия 1.1.10, и в конце есть аргументы конфигурации: параметры важнее, и нужно использовать новую версию, чтобы убедиться, что ни один модуль не пропущен.

2 Загрузите версию, которую хотите обновить

Я скачал версию 1.14.2

Второй шаг — выполнить ./configure в каталоге исходного кода + параметры после аргументов конфигурации, показанных на первом шаге.

Вот что я исполняю

./configure --prefix=/usr/local/nginx \
--with-http_addition_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_dav_module --with-http_v2_module 

Третий шаг — выполнить команду make в каталоге с исходным кодом.

На этом этапе, после компиляции make, в каталоге установки будет создан каталог objs, и в этом каталоге будет исполняемый файл nginx.

[root@xxxxx nginx-1.14.2]# make
make -f objs/Makefile
make[1]: Entering directory `/usr/local/download/nginx-1.14.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 \
	src/core/ngx_hash.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_buf.o \
	src/core/ngx_buf.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 \

Четвертый шаг создает резервную копию исходного старого файла nginx.

В основном для отступления

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

Пятый шаг — скопировать только что скомпилированный каталог в исходный каталог установки.

Ниже приведена рабочая команда моей машины.

cp objs/nginx /usr/local/nginx/sbin/

Шаг 6. Используйте make upgrade, чтобы заменить старый процесс nginx в исходном каталоге.

[root@xxx nginx-1.14.2]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

Седьмой шаг — выполнить /usr/local/nginx/sbin/nginx -V для просмотра последней версии nginx и скомпилированных параметров.

[root@xxxx nginx-1.14.2]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.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=/usr/local/nginx --with-http_addition_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_dav_module --with-http_v2_module

Хорошо, все готово

прочитать две вещи

Если вы считаете, что этот контент вас очень вдохновляет, я хотел бы пригласить вас сделать мне 2 небольших одолжения:

  1. Ставьте лайк, чтобы больше людей увидело этот контент
  2. Обратите внимание на паблик "Летучая мышь интервью", делитесь оригинальными знаниями время от времени, оригинальность не простая, поддержите пожалуйста побольше (там же есть небольшая программа для расчесывания вопросов).