企业生产环境
场景一:Nginx HTTPS 部署
需求:网站启用 HTTPS 加密访问。
要求:
1)手动签发 SSL 证书
1. 准备工作:安装 Nginx
如果你还没有安装 Nginx,请按照以下步骤安装 Nginx:
①安装 EPEL 仓库
yum install epel-release -y
② 安装 Nginx
yum install nginx -y (我是源代码编译安装,以下步骤都参考编译安装的nginx)
③启动并设置 Nginx 开机启动
systemctl start nginx
systemctl enable nginx
④检查 Nginx 是否正常运行
访问 http://your_server_ip,你应该能看到 Nginx 的默认欢迎页面。如果没有,使用以
下命令检查 Nginx 状态:systemctl status nginx
2. 获取 SSL/TLS 证书
SSL/TLS 证书是启用 HTTPS 加密连接所必需的。我们可以使用免费的 Let's Encrypt 证
书,也可以选择使用 自签名证书。
① 扩展使用 Let's Encrypt 免费证书(推荐)
Let's Encrypt 提供免费的 SSL/TLS 证书,且能够自动续期。我们将使用 Certbot 工具来自
动获取并配置证书。
②安装 Certbot
首先,安装 Certbot 和 Nginx 插件。
yum install epel-release -y
yum install certbot python2-certbot-nginx -y
2)配置 Nginx 支持 HTTPS
1.手动生成自签名证书(推荐你当前环境用)
①快速生成测试
如果你只是想在虚拟机里跑通HTTPS配置流程,不追求浏览器信任,直接用Linux自带的openss1生成证书,一分钟搞定,完全不依赖外网:
mkdir -p /usr/local/nginx/conf/ssl
cd /usr/local/nginx/conf/ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout nginx.key -out nginx.crt -subj "/CN=test.local"
②在nginx.conf 里配置
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/conf/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/nginx.key;
location /{
root html;
index index.html index.htm;
}
}
3)使用https://域名 成功访问网站
重启Nginx后,浏览器访问https://你的虚拟机IP,点击“高级继续前往”就能看到页面。这才是你当前虚拟机环境下最快能”手动签发”并验证SSL配置的方式。
场景二:Nginx + Keepalived 高可用
需求: Web 服务实现高可用,主节点故障自动切换。
环境规划:Nginx × 2(Master / Backup)
提交:
1、配置文件
2、实验步骤
3、HTTPS 访问截图
4、故障切换截图(切换前、切换后)
要求:
1) 完成 Nginx + Keepalived 部署
1.安装 Nginx 并做好区分标记
①安装 Nginx(两台都装)
# 有网环境
yum -y install epel-release
yum -y install nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
# 验证
curl -I http://127.0.0.1
② 做一个能区分主备的首页(关键!小白一定要做)
# 在 dr1(主)上执行
echo "<h1>I am MASTER --- 192.168.10.80</h1>" > /usr/local/nginx/html/index.html
# 在 dr2(备)上执行
echo "<h1>I am BACKUP --- 192.168.10.23</h1>" > /usr/local/nginx/html/index.html
③ 各自验证
curl http://192.168.10.80 # 应输出 I am MASTER
curl http://192.168.10.23 # 应输出 I am BACKUP
2.安装配置 Keepalived(默认抢占模式)
① 安装 Keepalived(两台都装)
yum -y install keepalived
systemctl enable keepalived
② 先备份原配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
③ 主服务器 dr1(10.8.0.19)配置
vim /etc/keepalived/keepalived.conf
清空原有内容,写入:
global_defs {
router_id dr1 # 标识本机,两台不能一样
}
vrrp_instance VI_1 {
state MASTER # 角色:主
interface ens33 # 绑定的网卡(写物理网卡名,不要写
ens33:0)
virtual_router_id 51 # 虚拟路由ID,两台必须一致!
priority 100 # 优先级,主 > 备
advert_int 1 # 心跳间隔 1 秒
authentication {
auth_type PASS
auth_pass 1111 # 密码,两台必须一致
}
virtual_ipaddress {
192.168.10.180 # 虚拟 IP(VIP)
}
}
④ 备服务器 dr2(10.8.0.20)配置
global_defs {
router_id dr2 # 注意:和主不同
}
vrrp_instance VI_1 {
state BACKUP # 角色:备
interface ens33
virtual_router_id 51 # 和主一致
priority 90 # 比主小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 # 和主一致
}
virtual_ipaddress {
192.168.10.180
}
}
⑤ 启动服务
systemctl start keepalived
systemctl status keepalived
⑥ 验证 VIP 落在谁身上
# 在 dr1 上执行
ip addr show ens33
应当看到 inet 192.168.10.180/32 scope global secondary ens33 —— VIP 在主上。
# 在 dr2 上执行
ip addr show ens33 #ens160
备机上看不到 192.168.10.180。
⑦ 从客户端验证服务
curl http://192.168.10.180
# 应输出:I am MASTER --- 192.168.10.80 (VIP 指向了主)
2) 演示主节点故障切换(VIP 自动漂移)
故障切换测试(Failover)
①模拟主服务器故障(注意:不要直接关机,用停服务的方式更直观)
# 在 dr1(主)上执行:停掉 keepalived,模拟故障
systemctl stop keepalived
②立刻到备机 dr2 上观察:
ip addr show ens33 # ens160
# 应看到 VIP 192.168.10.180 已经出现在备机上
③再从客户端访问:
curl http://192.168.10.180
# 输出变成:I am BACKUP --- 10.8.0.20
④恢复主服务器
# 在 dr1(主)上执行
systemctl start keepalived
⑤再查 VIP
# dr1 上
ip addr show ens33 # VIP 又回到主上了(因为默认是"抢占"模式)
# dr2 上
ip addr show ens33 #ens160 # 备机上的 VIP 消失
3) 验证业务访问不中断
①公网网关必须一样(注意)
把上面的/etc/keepalived/keepalived.conf配置改成:10.8.0.100(两台机器都需要改)
②用客户端执行 while true; do curl http://10.8.0.100; sleep 1; done
③依次操作
关闭dir1
systemctl stop keepalived
开启dir2
在开启dir1
④结果
关闭dir1,VIP到dir2,在开启dir1,VIP再一次回到主机