Instale la última versión del paquete nginx-1.25.1.tar.gz
[root@suian src]# wget https://nginx.org/download/nginx-1.25.1.tar.gz
El último artículo publicado fue sobre la versión nginx-1.24.0 instalada mediante el método de compilación. Este capítulo registra la actualización sin problemas a la versión nginx-1.25.1.
Intente utilizar una actualización fluida en el entorno de producción. No es necesario cerrar el servicio sin ningún problema para lograr una actualización continua del servicio.
[root@suian src]# ls
nginx-1.24.0 nginx-1.25.1 nginx-1.25.1.tar.gz
[root@suian src]# cd nginx-1.25.1/
#目前版本还是1.24.0
[root@suian nginx-1.25.1]# /apps/nginx/sbin/nginx -v
nginx version: nginx/1.24.0
[root@suian nginx-1.25.1]# /apps/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-18) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
Comience a compilar la nueva versión---(Debido a que el código aquí es demasiado largo, lo abrevié en el script)
[root@suian nginx-1.25.1]# vim install.sh
#!/bin/bash
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
[root@suian nginx-1.25.1]# bash install.sh
Compilación completada y instalación iniciada.
#只需要执行make,不需要执行make install
[root@suian nginx-1.25.1]# make
~
~
[root@suian nginx-1.25.1]# objs/nginx -v
nginx version: nginx/1.25.1
Ahora puedes ver que hay dos versiones nginx de los archivos de comando.
[root@suian nginx-1.25.1]# ll objs/nginx /apps/nginx/sbin/nginx
-rwxr-xr-x 1 nginx nginx 7639864 7月 29 10:15 /apps/nginx/sbin/nginx
-rwxr-xr-x 1 root root 7654480 7月 29 15:12 objs/nginx
Ahora haga una copia de seguridad de la versión anterior del comando nginx
[root@suian nginx-1.25.1]#cp /apps/nginx/sbin/nginx /opt/nginx.old
#把新版本的nginx命令复制过去覆盖到旧版本程序文件,注意:需要加 -f 选项强制覆盖,否则会提示Text file busy
[root@suian nginx-1.25.1]#cp -f ./objs/nginx /apps/nginx/sbin/
Detecte la nueva versión y la sintaxis y tolerabilidad del archivo de configuración, ejecute Kill para finalizar el proceso.
[root@suian nginx-1.25.1]#/apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@suian nginx-1.25.1]# kill -USR2 `cat /apps/nginx/logs/nginx.pid`
Puede ver dos maestros: el nuevo maestro es un proceso hijo del antiguo maestro y genera un nuevo proceso de trabajo.
Nota: Si no puede ver la siguiente nueva versión del proceso en la versión Nginx-1.22.1, debe usar el modo de servicio para reiniciar el servicio nginx y luego enviar la señal USR2
[root@suian nginx-1.25.1]#ps auxf|grep nginx
root 12018 0.0 0.0 12112 1092 pts/0 S+ 17:32 0:00 |
\_ grep --color=auto nginx
root 8814 0.0 0.2 42460 3760 ? Ss 16:58 0:00 nginx: master
process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
nginx 8957 0.0 0.2 77172 4724 ? S 17:23 0:00 \_ nginx:
worker process
nginx 8958 0.0 0.2 77172 4724 ? S 17:23 0:00 \_ nginx:
worker process
root 12014 0.0 0.3 42448 5512 ? S 17:32 0:00 \_ nginx:
master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
nginx 12015 0.0 0.2 77192 4904 ? S 17:32 0:00 \_
nginx: worker process
nginx 12016 0.0 0.2 77192 4908 ? S 17:32 0:00 \_
nginx: worker process
Utilice otra máquina para ver la versión anterior del programa.
root@ubuntu:~# curl http://10.0.0.102 -I
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Sat, 29 Jul 2023 07:31:36 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 29 Jul 2023 02:15:18 GMT
Connection: keep-alive
ETag: "64c47636-267"
Accept-Ranges: bytes
Primero cierre el antiguo proceso de trabajo de nginx, sin cerrar el antiguo proceso principal de nginx para facilitar la reversión.
Envíe la señal WINCH al antiguo proceso principal de Nginx, que cerrará sin problemas el antiguo proceso de trabajo (el proceso principal no saldrá). En este momento, todas las solicitudes nuevas serán procesadas por la nueva versión de Nginx.
[root@suian nginx-1.25.1]#kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`
Si la versión anterior del proceso de trabajo tiene una solicitud anterior del usuario, esperará hasta que se procese antes de cerrarse, es decir, se cerrará sin problemas.
Si hay nuevas solicitudes, serán atendidas por la nueva versión.
root@ubuntu:~# curl http://10.0.0.102 -I
HTTP/1.1 200 OK
Server: nginx/1.25.1
Date: Sat, 29 Jul 2023 07:33:17 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 29 Jul 2023 02:15:18 GMT
Connection: keep-alive
ETag: "64c47636-267"
Accept-Ranges: bytes
[root@suian nginx-1.25.1]# nginx -v
nginx version: nginx/1.25.1
[root@suian nginx-1.25.1]# nginx -V
nginx version: nginx/1.25.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-18) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
Si descubre que hay un problema con la nueva versión y es necesario revertirla, puede enviar una señal HUP para reiniciar la versión anterior del trabajador.
[root@suian nginx-1.25.1]#kill -HUP `cat /apps/nginx/logs/nginx.pid.oldbin`
[root@suian nginx-1.25.1]#pstree -p |grep nginx
|-nginx(8814)-+-nginx(12014)-+-nginx(12015)
| | `-nginx(12016)
| |-nginx(12090)
| `-nginx(12091)
Finalmente, cierre la nueva versión de maestro y trabajador. Si la señal HUP anterior no se ejecuta, la señal SALIR en este paso también puede reiniciar la versión anterior del proceso de trabajo.
[root@suian nginx-1.25.1]#kill -QUIT `cat /apps/nginx/logs/nginx.pid`
#恢复旧版的文件
[root@suian nginx-1.25.1]#mv /opt/nginx.old /apps/nginx/sbin/
mv: overwrite '/apps/nginx/sbin/nginx'? y
Bien, este capítulo ha terminado.
Dirección de descarga del paquete de código fuente oficial
Si tienes alguna duda, puedes dejar un comentario o enviarme un mensaje privado y te ayudaré a resolver tus dudas.