在CentOS上升级Nginx而不中断服务,可以采用滚动升级(rolling upgrade)的方法。这种方法允许你在不停机的情况下逐步替换旧的Nginx进程。以下是详细的步骤:
备份配置文件和数据:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo cp -r /var/log/nginx /var/log/nginx.bak
sudo cp -r /var/www/html /var/www/html.bak
安装新版本的Nginx: 你可以从Nginx官方网站下载最新版本的源码进行编译安装,或者使用EPEL仓库安装预编译的版本。
使用EPEL仓库安装:
sudo yum install epel-release
sudo yum update
sudo yum install nginx
从源码编译安装(可选):
sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.21.6.tar.gz
tar -zxvf nginx-1.21.6.tar.gz
cd nginx-1.21.6
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v3_module
make
sudo make install
启动新版本的Nginx:
假设你从源码编译安装的新版本Nginx路径是 /usr/local/nginx,你可以这样启动它:
sudo /usr/local/nginx/sbin/nginx
停止旧版本的Nginx: 逐个停止旧版本的Nginx worker进程,而不影响master进程。
sudo nginx -s stop
你可以通过以下命令查看Nginx进程:
ps aux | grep nginx
找到所有的worker进程并逐个停止它们:
sudo kill -QUIT <worker_pid>
例如:
sudo kill -QUIT 1234
sudo kill -QUIT 5678
替换二进制文件: 将新版本的Nginx二进制文件替换旧版本。
sudo mv /usr/sbin/nginx /usr/sbin/nginx.old
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
重启Nginx: 最后,重启Nginx以确保所有配置生效。
sudo systemctl restart nginx
检查Nginx状态:
sudo systemctl status nginx
访问网站: 确保网站可以正常访问,没有中断服务。
通过以上步骤,你可以在CentOS上实现Nginx的滚动升级,从而避免服务中断。