五、配置实例
大约 6 分钟约 1726 字
(一)反向代理实例一
1. 实现效果
- 打开浏览器,输入地址
www.123.com
- 跳转到
Linux
系统的Tomcat
主页面
2. 准备工作
- 在
Linux
系统安装Tomcat
,使用默认端口8080
- 将
Tomcat
安装文件放到Linux
系统中,解压 - 进入
Tomcat
的bin
目录中,./startup.sh
启动Tomcat
服务器
- 将
- 对外开放访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
- 查看已开放的端口号
firewall-cmd --list-all
- 在
Windows
系统中通过浏览器访问Tomcat
服务器
3. 访问过程的解析
4. 具体配置
1)在 windows 系统的 hosts 文件中进行域名和 ip 对应关系的配置:【ip 地址 域名】
192.168.17.129 www.123.com
- 配置完可以通过
http://www.123.com:8080/
访问到Tomcat
首页
2)在 Nginx 配置文件中进行请求转发的配置(反向代理)
cd /usr/local/nginx/
vi nginx.conf
i
server {
listen 80;
server_name 192.168.17.129; #修改此行
location / {
root html;
proxy_pass http://127.0.0.1:8080; #增加此行
index index.html index.htm;
}
}
:wq
5.最终测试
cd /usr/local/nginx/
./nginx
- 配置完可以通过
http://www.123.com/
访问到Tomcat
首页
(二)反向代理实例二
1.实现效果
- 使用
Nginx
反向代理,根据访问的路径跳转到不同端口的服务中Nginx
监听端口为9001
- 访问
http://127.0.0.1:9001/edu/
直接跳转到12.0.0.1:8080
- 访问
http://127.0.0.1:9001/vod/
直接跳转到12.0.0.1:8081
2.准备工作
- 准备两台
Tomcat
服务器,一台8080
,一台8081
- 创建文件夹和两个测试页面,一个
/edu/a.html
,一个/vod/a.html
3.具体配置
- 找到
Nginx
配置文件
server {
listen 9001;
server_name 192.168.17.129;
# ~表示开启路径正则表达式匹配形式
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
- 开放对外访问的端口号:
9001
、8080
、8081
4.最终测试
- 访问
http://127.0.0.1:9001/edu/a.html
显示页面内容 - 访问
http://127.0.0.1:9001/vod/a.html
显示页面内容
(三)负载均衡
1.实现效果
- 浏览器地址栏输入地址:
http://192.168.17.129/edu/a.html
,实现负载均衡效果,将多次请求平均到8080
和8081
端口中
2.准备工作
- 准备两台
Tomcat
服务器,一台8080
,一台8081
- 在两台
Tomcat
的webapps
目录中,创建edu
文件夹,在edu
文件中创建页面a.html
,用于测试
3.具体配置
upstream myserver {
server 192.168.17.129:8080;
server 192.168.17.129:8081;
} #
server {
listen 80;
server_name 192.168.17.129; #
location / {
proxy_pass http://myserver; #
root html;
index index.html index.htm;
}
}
4.最终测试
- 访问
http://192.168.17.129/edu/a.html
,每次刷新都随机返回8080/8081
的页面内容
(四)动静分离
1.实现效果
- 访问
http://192.168.17.129/image/01.jpg
、http://192.168.17.129/www/a.html
可以请求到相应的静态资源
2.准备工作
- 在
Linux
系统中准备静态资源,用于进行访问:/data/image/01.jpg
、/data/www/a.html
3.具体配置
server {
listen 80;
server_name 192.168.17.129;
location /www/ {
root /data/;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on;
}
}
4.最终测试
- 浏览器中输入地址
http://192.168.17.129/image/01.jpg
,因为配置了autoindex on
,所以访问后会显示当前目录,点击图片后可以看到图片 - 浏览器中输入地址
http://192.168.17.129/www/a.html
,可以看到页面内容
(五)高可用集群
1.高可用
- 问题:
Nginx
服务器可能宕机
- 解决:再增加一台备份的
Nginx
服务器
- 需要两台
Nginx
服务器 - 需要
keepalived
插件库 - 需要虚拟
IP
地址
2.准备工作
- 需要两台服务器:
192.168.17.129
、192.168.17.131
- 在两台服务器中安装
Nginx
- 在两台服务器中安装
keepalived
# 安装
yum install keepalived -y
# 查看
rpm -q -a keepalived
- 安装后在
etc
里面生成目录keepalived
,有文件keepalived.conf
3.完成高可用配置(主从配置)
1)修改 /etc/keepalived/keepalived.conf 配置文件
- 主服务器和备份服务器不同
vrrp_instance VI_1 {
state MASTER # 主服务器
instance ens33 # 网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H虚拟地址
}
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器
instance ens33 # 网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H虚拟地址
}
}
2)keepalived 检测 Nginx 是否宕机的脚本
- 本地创建
nginx_check.sh
#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
- 放到服务器
/usr/local/src/
目录下
3)查找网卡
usr
目录下输入ifconfig
,第一个冒号前的就是
4)启动服务器:Nginx、129 服务器、131 服务器
# 启动Nginx
./nginx
# 启动keepalived
systemctl start keepalived.service
4.最终测试
- 地址栏输入虚拟 IP:
192.168.17.50
,可以看到Nginx
启动页面,且在129
服务器输入ip a
可以看到ens33
的进程 - 把主服务器
Nginx
和keepalived
停止,再访问192.168.17.50
,可以看到Nginx
启动页面,且在131
服务器输入ip a
可以看到ens33
的进程
(六)高可用配置文件详解
1.global_defs:全局配置
router_id LVS_DEVELBACK
:配置访问到哪一台主机- 在主机服务器中查看
vi /etc/hosts
127.0.0.1 LVS_DEVEL # 新增
2.vrrp_script chk_http_port:脚本配置
interval 1
:配置脚本执行的间隔weight -20
:配置当前服务器的权重
3.vrrp_instance VI_1 :虚拟 IP 配置
vrrp_instance VI_1 {
state BACKUP # 备份服务器
instance ens33 # 网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H虚拟地址
}
}
(七)Nginx 原理
1. 争抢机制
2. 一个 master 和多个 worker 的好处
- 可以使用
nginx -s reload
热部署,利用Nginx
进行热部署操作 - 每个
worker
是独立的进程,如果有其中一个worker
出现问题,由于其他worker
是独立的,所以可以继续进行争抢,实现请求过程,不会造成服务中断
3. 设置多少个 worker 合适
Nginx
同Redis
类似,都采用了I/O
多路复用机制,Windows
中不采用此机制,所以一般部署到Linux
中能把性能发挥到最大worker
数和服务器的cpu
数量相等是最合适的
4. worker_connection 连接数
1)发送一个请求,占用了 worker 的几个连接数?
- 2 个或 4 个
- 访问静态资源时占用 2 个,如果需要使用
Tomcat
访问服务器资源则需要 4 个
2)Nginx 有一个 master,有四个(worker_processes)worker,每个 work 支持最大的连接数(worker_connections)是 1024,支持的最大并发数是多少?
worker 最大支持的连接数:4*1024
(4*1024)/2
(4*1024)/4
- 普通的静态访问最大并发数是:
worker_connections * worker_processes / 2
HTTP
作为反向代理的最大并发数是:worker_connections * worker_processes / 4