Сегодня я неожиданно получил напоминание по электронной почте от 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 небольших одолжения:
- Ставьте лайк, чтобы больше людей увидело этот контент
- Обратите внимание на паблик "Летучая мышь интервью", делитесь оригинальными знаниями время от времени, оригинальность не простая, поддержите пожалуйста побольше (там же есть небольшая программа для расчесывания вопросов).