nginx安装和平滑升级
·
文章目录
一、编译安装Nginx服务
1. 准备工作
- 官方源码包:从 nginx.org/download/nginx-1.20.2.tar.gz 下载
- 环境配置:关闭防火墙和SELinux(生产环境建议配置规则而非直接关闭)
systemctl stop firewalld systemctl disable firewalld setenforce 0 # 临时关闭SELinux,永久关闭需修改/etc/selinux/config - 将下载的
nginx-1.20.2.tar.gz上传至/opt目录
2. 安装依赖包
Nginx编译依赖以下开发库,需提前安装:
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
3. 创建专用运行用户
为避免权限问题,创建无登录权限的专用用户:
useradd -M -s /sbin/nologin nginx # -M:不创建家目录;-s:指定shell为nologin
4. 编译安装Nginx
基础编译配置(适用于简单场景)
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/ # 解压至/opt目录
cd nginx-1.20.2/
# 配置编译参数(注意反斜杠后无空格,且最后一行无反斜杠)
./configure \
--prefix=/usr/local/nginx \ # 安装路径
--user=nginx \ # 运行用户
--group=nginx \ # 运行用户组
--with-http_stub_status_module \ # 启用状态统计模块
--with-http_ssl_module # 启用HTTPS支持
# 编译并安装
make && make install
# 创建软链接,方便系统识别nginx命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
企业级编译配置(适用于生产环境)
# 先创建日志和PID目录(避免启动时权限错误)
mkdir -p /var/log/nginx /var/run/nginx /var/lock/
chown -R nginx:nginx /var/log/nginx /var/run/nginx /var/lock/
# 企业级模块配置
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \ # 启用HTTPS
--with-http_v2_module \ # 启用HTTP/2协议
--with-http_gzip_static_module \ # 启用静态gzip压缩
--with-http_stub_status_module \ # 启用状态监控
--with-pcre \ # 支持PCRE正则(rewrite依赖)
--with-stream \ # 启用TCP代理(如反向代理数据库)
--with-stream_ssl_module \ # TCP代理的SSL支持
--http-log-path=/var/log/nginx/access.log \ # 访问日志路径
--error-log-path=/var/log/nginx/error.log \ # 错误日志路径
--pid-path=/var/run/nginx/nginx.pid \ # PID文件路径
--lock-path=/var/lock/nginx.lock # 锁文件路径
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
注意:可通过
--without-xxx禁用不需要的模块,第三方模块需用--add-module引入。
5. Nginx服务管理
基础操作
nginx -t # 检查配置文件语法(关键!启动前必做)
nginx # 启动服务
停止/重载/升级
| 操作 | 命令(推荐使用信号名,更易读) |
|---|---|
| 停止 | kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid) |
| 重载配置 | kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid) |
| 日志分割 | kill -s USR1 $(cat /usr/local/nginx/logs/nginx.pid) |
| 平滑升级 | kill -s USR2 $(cat /usr/local/nginx/logs/nginx.pid) |
版本升级步骤(以升级到1.22.0为例)
# 1. 解压新版本源码
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/
# 2. 用与旧版本相同的配置参数编译(关键!避免模块不一致)
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module # 需与旧版本保持一致
# 3. 编译(不要执行make install!)
make
# 4. 替换二进制文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old # 备份旧版本
cp objs/nginx /usr/local/nginx/sbin/nginx # 复制新版本
# 5. 平滑升级(不中断服务)
1.第一种
kill -s USR2 $(cat /usr/local/nginx/logs/nginx.pid) # 启动新进程
kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin) # 关闭旧进程
2.第二种
cd nginx-1.22.0/
make upgrade
/usr/local/nginx/sbin/nginx -s reload
# 验证版本
nginx -V # 查看编译参数和版本
6. 添加系统服务(支持systemctl管理)
方法一:传统init.d服务(兼容CentOS 6)
vim /etc/init.d/nginx
写入以下内容(修正原内容中chkconfig运行级别错误):
#!/bin/bash
#chkconfig: 2345 99 20 # 运行级别2/3/4/5,开机优先级99,关机优先级20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
添加权限并注册服务:
chmod +x /etc/init.d/nginx
chkconfig --add nginx # 添加到系统服务
# 管理命令
service nginx start|stop|restart|reload
方法二:systemd服务(推荐,适用于CentOS 7+)
vim /lib/systemd/system/nginx.service
写入以下内容:
[Unit]
Description=nginx # 服务描述
After=network.target # 网络启动后再启动nginx
[Service]
Type=forking # 后台运行模式
PIDFile=/usr/local/nginx/logs/nginx.pid # PID文件路径
ExecStart=/usr/local/nginx/sbin/nginx # 启动命令(绝对路径)
ExecReload=/bin/kill -s HUP $MAINPID # 重载命令
ExecStop=/bin/kill -s QUIT $MAINPID # 停止命令
PrivateTmp=true # 分配独立临时空间
[Install]
WantedBy=multi-user.target # 多用户模式下启动
设置权限并启用:
chmod 754 /lib/systemd/system/nginx.service # 权限设置
systemctl daemon-reload # 重载systemd配置
# 管理命令
systemctl start nginx.service # 启动
systemctl enable nginx.service # 开机自启
systemctl stop nginx.service # 停止
systemctl reload nginx.service # 重载配置
总结
本文详细梳理了在Linux系统(以CentOS为例)下编译安装Nginx服务的完整流程,从前期准备到生产级配置、服务管理,形成了一套可落地的操作指南,核心内容可概括为以下几点:
-
基础准备是前提:需先获取Nginx官方源码包并上传至指定目录,同时根据场景处理防火墙与SELinux(生产环境建议配置规则而非直接关闭),避免后续部署受阻。
-
依赖与用户保障安全:通过
yum安装gcc、pcre、openssl等编译必需的开发库,确保编译顺利;同时创建无登录权限的nginx专用用户,规避权限泄露风险。 -
编译配置分场景选择:提供两种编译方案——基础配置适用于简单场景,仅启用HTTPS、状态统计等核心模块;企业级配置则针对生产环境,新增HTTP/2、TCP代理、自定义日志/PID路径等,满足高可用与可监控需求。
-
服务管理兼顾灵活与稳定:基础操作中强调
nginx -t(配置语法检查)是启动前的关键步骤;通过信号命令实现停止、重载、日志分割,尤其版本升级环节(以1.22.0为例),通过“编译不安装+平滑替换二进制文件”,实现服务无中断升级。 -
系统服务适配不同版本:提供两种服务注册方式——传统
init.d脚本兼容CentOS 6,systemd服务(推荐)适配CentOS 7+,均支持开机自启与便捷的启停/重载操作,统一服务管理入口。
更多推荐

所有评论(0)