Nginx 部署
安装必要的依赖包
bash
复制代码
# 安装编译工具和开发库
yum -y install gcc gcc-c++ automake autoconf libtool make cronolog git
下载并安装 PCRE(正则表达式库)
bash
复制代码
# 进入源码目录
cd /usr/local/src
# 下载 PCRE 库(用于 Nginx 的 URL 重写功能)
wget https://mirrors.aliyun.com/exim/pcre/pcre-8.36.tar.gz
# 解压并进入目录
tar -zxf pcre-8.36.tar.gz && cd pcre-8.36
# 编译安装三部曲:配置、编译、安装
./configure && make && make install
下载并安装 Zlib(压缩库)
bash
复制代码
# 返回源码目录
cd /usr/local/src
# 下载 Zlib 库(用于 Nginx 的 Gzip 压缩功能)
wget http://zlib.net/fossils/zlib-1.2.8.tar.gz
# 解压并进入目录
tar -zxf zlib-1.2.8.tar.gz && cd zlib-1.2.8
# 编译安装
./configure && make && make install
下载并安装 OpenSSL(加密库)
bash
复制代码
# 返回源码目录
cd /usr/local/src
# 下载 OpenSSL 库(用于 HTTPS 支持)
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_0_2n/openssl-1.0.2n.tar.gz
# 解压并进入目录
tar -zxf openssl-1.0.2n.tar.gz && cd openssl-1.0.2n/
# 编译安装
./config && make && make install
下载并编译 Nginx
bash
复制代码
# 返回源码目录
cd /usr/local/src
# 下载 Nginx 源码包
wget http://nginx.org/download/nginx-1.8.1.tar.gz
# 解压源码包
tar -zxf nginx-1.8.1.tar.gz
# 下载 Nginx 上游健康检查模块(用于监控后端服务器状态)
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git
# 进入 Nginx 源码目录
cd nginx-1.8.1
# 应用健康检查模块的补丁
patch -p1 < ../nginx_upstream_check_module/check_1.7.2+.patch
# 配置编译选项,指定安装目录,启用 SSL 模块(HTTPS 支持),启用 Gzip 静态压缩,启用 Gzip 静态压缩,指定 PCRE 库路径,指定 Zlib 库路径,指定 OpenSSL 库路径,启用状态监控模块,启用真实 IP 模块,添加健康检查模块
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre=/usr/local/src/pcre-8.36 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.2n \
--with-http_stub_status_module \
--with-http_realip_module \
--add-module=/usr/local/src/nginx_upstream_check_module
# 编译并安装
make && make install
创建系统服务
bash
复制代码
# 创建软链接,方便直接使用 nginx 命令
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx
# 创建 Nginx 系统服务脚本
cat > /etc/init.d/nginx << 'EOF'
#!/bin/bash
#
# Nginx 服务管理脚本
# 运行级别 启动顺序 关闭顺序
# chkconfig: 35 85 15
set -e
# 设置系统路径,确保能找到所有必要的命令
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
# 检查 Nginx 可执行文件是否存在且有执行权限
test -x $DAEMON || exit 0
# 定义启动函数
d_start(){
$DAEMON || echo -n " Nginx 已经在运行了"
}
# 定义停止函数(优雅停止)
d_stop() {
$DAEMON -s quit || echo -n " Nginx 没有在运行"
}
# 定义重载配置函数
d_reload() {
$DAEMON -s reload || echo -n " 配置重载失败"
}
# 根据传入的参数执行相应操作
case "$1" in
start)
echo -n "正在启动 $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "正在停止 $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "正在重新加载 $DESC 配置..."
d_reload
echo "配置重载完成。"
;;
restart)
echo -n "正在重启 $DESC: $NAME"
d_stop
sleep 2
d_start
echo "."
;;
*)
# 如果参数不对,显示使用方法
echo "使用方法: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 3
;;
esac
exit 0
EOF
启动 Nginx 并设置开机自启
bash
复制代码
# 进入服务脚本目录
cd /etc/init.d/
# 给服务脚本添加执行权限
chmod u+x nginx
# 启动 Nginx 服务
/etc/init.d/nginx start
# 检查 Nginx 是否正常启动(查看 80 端口是否在监听)
netstat -ano|grep 80
# 将 Nginx 添加到系统服务管理
chkconfig --add nginx
# 设置 Nginx 在运行级别 2、3、4、5 开机自启
chkconfig --level 2345 nginx on
配置日志轮转(防止日志文件过大)
bash
复制代码
# 创建 Nginx 日志轮转配置
cat > /etc/logrotate.d/nginx << 'EOF'
# Nginx 日志轮转配置
/usr/local/nginx/logs/*.log {
create 0644 root root
daily
rotate 2
missingok
copytruncate
ifempty
compress
noolddir
dateext
dateformat .%Y%m%d
}
EOF
验证安装
bash
复制代码
# 检查 Nginx 进程
ps aux | grep nginx
# 检查 Nginx 版本
nginx -v
# 访问测试
curl http://localhost
常用管理命令
bash
复制代码
# 启动 Nginx
service nginx start
# 停止 Nginx
service nginx stop
# 重启 Nginx
service nginx restart
# 重新加载配置(不中断服务)
service nginx reload
# 检查 Nginx 状态
service nginx status
# 测试配置文件语法
nginx -t
Keepalived 部署指南
安装必要的依赖
bash
复制代码
# 安装编译工具和开发库
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
# 安装网络工具(用于后续的监控和调试)
yum install -y nmap
下载并编译安装 Keepalived
bash
复制代码
# 进入源码目录
cd /usr/local/src
# 下载 Keepalived 源码包
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
# 解压源码包
tar -zxvf keepalived-1.2.19.tar.gz
# 进入解压后的目录
cd keepalived-1.2.19
# 配置编译选项(指定安装目录)
./configure --prefix=/usr/local/keepalived
# 编译并安装
make && make install
配置系统服务
bash
复制代码
# 复制服务管理脚本到系统目录
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# 复制服务配置文件
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 复制可执行文件到系统路径
cp /usr/local/keepalived/sbin/keepalived /bin/keepalived
# 创建配置目录
mkdir /etc/keepalived
# 复制默认配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# 给服务脚本添加执行权限
chmod a+x /etc/init.d/keepalived
# 设置开机自启(在运行级别 2、3、4、5 启动)
chkconfig --level 2345 keepalived on
创建 Nginx 健康检查脚本
bash
复制代码
# 创建健康检查脚本目录
mkdir -p /usr/local/keepalived
# 创建健康检查脚本
cat > /usr/local/keepalived/check_nginx.sh << 'EOF'
#!/bin/bash
# Nginx 健康检查脚本
# 统计 Nginx 进程数量
counter=$(ps -C nginx --no-heading|wc -l)
# 如果没有 Nginx 进程在运行
if [ "${counter}" = "0" ]; then
# 尝试启动 Nginx
/etc/init.d/nginx start
# 等待 2 秒让 Nginx 启动
sleep 2
# 再次检查 Nginx 进程
counter=$(ps -C nginx --no-heading|wc -l)
# 如果还是没启动成功
if [ "${counter}" = "0" ]; then
# 停止 Keepalived,触发故障转移
systemctl stop keepalived
fi
fi
EOF
# 给脚本添加执行权限
chmod +x /usr/local/keepalived/check_nginx.sh
配置 Keepalived - 主节点配置
bash
复制代码
# 创建主节点配置文件
cat > /etc/keepalived/keepalived.conf << 'EOF'
!Configuration File for keepalived
# 全局配置段
global_defs {
router_id Nginx_Master_Node
}
# 定义健康检查脚本
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
# VRRP 实例配置(虚拟路由器)
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 80
priority 100
nopreempt
advert_int 1
# 认证配置(同一组节点必须相同)
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟 IP 地址配置(浮动 IP)
virtual_ipaddress {
192.168.1.80/24
}
# 跟踪脚本配置(监控 Nginx 状态)
track_script {
chk_nginx
}
}
EOF
配置 Keepalived - 备节点配置
bash
复制代码
# 创建备节点配置文件
cat > /etc/keepalived/keepalived.conf << 'EOF'
!Configuration File for keepalived
# 全局配置段
global_defs {
router_id Nginx_Backup_Node
}
# 定义健康检查脚本(与主节点相同)
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
# VRRP 实例配置
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 80
priority 99
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.80/24
}
track_script {
chk_nginx
}
}
EOF
启动和验证 Keepalived
bash
复制代码
# 重新加载系统服务配置
systemctl daemon-reload
# 重新加载 Keepalived 配置
systemctl reload keepalived
# 重启 Keepalived 服务
systemctl restart keepalived
# 检查 Keepalived 运行状态
systemctl status keepalived
# 查看日志,确认没有错误
journalctl -u keepalived -f
验证虚拟 IP 配置
bash
复制代码
# 查看网卡信息,确认虚拟 IP 是否绑定
ip addr show ens160
# 或者使用老命令
ifconfig ens160
# 检查 Keepalived 进程
ps aux | grep keepalived
# 测试虚拟 IP 是否可达
ping 192.168.1.80
故障转移测试
bash
复制代码
# 停止 Keepalived 来模拟节点故障
systemctl stop keepalived
# 在备节点上检查是否获得了虚拟 IP
ip addr show ens160
常用管理命令
bash
复制代码
# 启动 Keepalived
systemctl start keepalived
# 停止 Keepalived
systemctl stop keepalived
# 重启 Keepalived
systemctl restart keepalived
# 重新加载配置
systemctl reload keepalived
# 查看状态
systemctl status keepalived
# 查看日志
journalctl -u keepalived
# 实时查看日志
journalctl -u keepalived -f
重要提醒
- 网卡名称 :根据实际情况修改
interface ens160 为实际网卡名称
- 路由 ID :确保同一组 Keepalived 节点的
virtual_router_id 相同
- 认证密码:同一组节点的认证密码必须相同