nginx实现服务器端集群搭建(五)
nginx与tomcat部署
环境准备(tomcat)
1.准备Tomcat环境,并在Tomcat上部署一个web项目 2.准备Nginx环境,使用Nginx接收请求,并把请求分发到Tomat上
3、浏览器访问:http://192.168.200.146:8080/demo/index.html
获取动态资源的连接地址
http://192.168.200.146:8080/demo/getAddress
实验采用tomcat作为后台web服务器
(1)在服务器上准备一个tomcat
1.Tomcat官网地址:https://tomcat.apache.org/ 2.下载tomcat,本次课程使用的是apache-tomcat-8.5.59.tar.gz 3.将tomcat进行解压缩 mkdir web_tomcat tar -zxf apache-tomcat8.5.59.tar.gz -C /web_tomcat
(2)准备一个web项目,将其打包为war
1.将资料中的demo.war上传到tomcat8目录下的webapps包下 2.将tomcat进行启动,进入tomcat8的bin目录下 ./startup.sh
(3)启动tomcat进行访问测试
静态资源: http://192.168.200.146:8080/demo/index.html 动态资源: http://192.168.200.146:8080/demo/getAddress
环境准备(nginx)
(1)使用nginx的反向代理,将请求转给tomcat进行处理
upstream webservice { server 192.168.200.146:8080; } server{ listen 80; server_name localhost; location /demo { proxy_pass http://webservice; } }
(2)启动访问测试
nginx实现动静分离
动静分离实现步骤
进入到tomcat的webapps目录下,将之前的内容删除掉
将新的war包复制到webapps下
将tomcat启动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
$(function(){
$.get('http://192.168.200.133/demo/getAddress',functi on(data){
$("#msg").html(data);
});
});
</script>
</head>
<body>
<img src="images/logo.png"/>
<h1>Nginx如何将请求转发到后端服务器</h1>
<h3 id="msg"></h3>
<img src="images/mv.png"/>
</body>
</html>
4、配置nginx的静态资源与动态资源的访问
upstream webservice{ server 192.168.200.146:8080; } server { listen 80; server_name localhost; #动态资源 location /demo { proxy_pass http://webservice; } #静态资源 location ~/.*\.(png|jpg|gif|js){ root html/web; gzip on; } location / { root html/web; index index.html index.htm; } }
Nginx实现Tomcat集群搭建

环境准备:
(1)准备3台tomcat,使用端口进行区分[实际环境应该是三台服务器],修改server.ml,将端口修改分别修改为8080,8180,8280
(2)启动tomcat并访问测试
http://192.168.200.146:8080/demo/getAddress http://192.168.200.146:8180/demo/getAddress http://192.168.200.146:8280/demo/getAddress
(3)在Nginx对应的配置文件中添加如下内容:
upstream webservice{ server 192.168.200.146:8080; server 192.168.200.146:8180; server 192.168.200.146:8280; }
nginx高可用解决方案

需要两台以上的Nginx服务器对外提供服务,这样的话就可以解决其中一 台宕机了,另外一台还能对外提供服务,
但是如果是两台Nginx服务器的 话,会有两个IP地址,用户该访问哪台服务器,用户怎么知道哪台是好的,哪台是宕机了的?
keepalived
vrrp介绍

VRRP可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器 中的一台。
其中的虚拟路由即Virtual路由是由VRRP路由群组创建的一个 不真实存在的路由,这个虚拟路由也是有对应的IP地址。
而且VRRP路由1 和VRRP路由2之间会有竞争选择,通过选择会产生一个Master路由和一个 Backup路由。
2、路由容错协议
Master路由和Backup路由之间会有一个心跳检测,Master会定时告知 Backup自己的状态,如果在指定的时间内,
Backup没有接收到这个通知 内容,Backup就会替代Master成为新的Master。Master路由有一个特权就是虚拟路由和后端服务器
都是通过Master进行数据传递交互的,而备 份节点则会直接丢弃这些请求和数据,不做处理,只是去监听Master的状态
环境搭建

步骤1:从官方网站下载keepalived,官网地址 https://keepalived.org/
步骤2:将下载的资源上传到服务器 keepalived-2.0.20.tar.gz
步骤3:创建keepalived目录,方便管理资源 mkdir keepalived
步骤4:将压缩文件进行解压缩,解压缩到指定的目录 tar -zxf keepalived-2.0.20.tar.gz -C keepalived/
步骤5:对keepalived进行配置,编译和安装 cd keepalived/keepalived-2.0.20 ./configure --sysconf=/etc --prefix=/usr/local make && make install
keepalived配置文件介绍
global全局部分: global_defs { #通知邮件,当keepalived发送切换时需要发email给具体的邮箱 地址
notification_email {
tom@itcast.cn jerry@itcast.cn
}
#设置发件人的邮箱信息
notification_email_from zhaomin@itcast.cn
#指定smpt服务地址
smtp_server 192.168.200.1
#指定smpt服务连接超时时间
smtp_connect_timeout 30
#运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
router_id LVS_DEVEL
#默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,
如果通告与接收的上一个通告来自相同的 master路由器,则不执行检查(跳过检查)
vrrp_skip_check_adv_addr
#严格遵守VRRP协议。
vrrp_strict
#在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。 默认是0
vrrp_garp_interval 0
#在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
}
VRRP部分,该部分可以包含以下四个子模块 1. vrrp_script 2. vrrp_sync_group 3. garp_group 4. vrrp_instance 我们会用到第一个和第四个,
#设置keepalived实例的相关信息,VI_1为VRRP实例名称
vrrp_instance VI_1 {
state MASTER #有两个值可选MASTER主 BACKUP备
interface ens33 #vrrp实例绑定的接口,用于发送VRRP 包[当前服务器使用的网卡名称]
virtual_router_id 51#指定VRRP实例ID,范围是0-255
priority 100 #指定优先级,优先级高的将成为MASTER
advert_int 1 #指定发送VRRP通告的间隔,单位是秒
authentication { #vrrp之间通信的认证信息
auth_type PASS #指定认证方式。PASS简单密码认证(推荐)
auth_pass 1111 #指定认证使用的密码,最多8位
}
virtual_ipaddress { #虚拟IP地址设置虚拟IP地址,供用户 访问使用,可设置多个,一行一个
192.168.200.222
}
}
配置内容如下:
服务器1
global_defs { notification_email { tom@itcast.cn jerry@itcast.cn } notification_email_from zhaomin@itcast.cn smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id keepalived1 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.222 } }
服务器2
global_defs { notification_email { tom@itcast.cn jerry@itcast.cn } notification_email_from zhaomin@itcast.cn smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id keepalived2 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } 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.200.222 } }
访问测试
2、 分别启动两台服务器的keepalived
cd /usr/local/sbin
./keepalived
再次通过 ip a查看ip

3、当把192.168.200.133服务器上的keepalived关闭后,再次查看ip

keepalived之vrrp_script
vrrp_script 脚本名称 { script "脚本位置" interval 3 #执行时间间隔 weight -20 #动态调整 vrrp_instance的优先级 }
2、编写脚本
#!/bin/bash num=`ps -C nginx --no-header | wc -l` if [ $num -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
chmod 755 ck_nginx.sh
4、将脚本添加到
vrrp_script ck_nginx { script "/etc/keepalived/ck_nginx.sh" #执行脚本的位置 interval 2 #执行脚本的周期,秒为单位 weight -20 #权重的计算方式 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 10 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.111 } track_script { ck_nginx } }
nginx制作下载站点
| 语法 | autoindex on | off; |
| 默认值 | autoindex off; |
| 位置 | http、server、location |
(2)autoindex_exact_size:对应HTLM格式,指定是否在目录列表展示文件的详细大小
| 语法 | autoindex_exact_size on | off; |
| 默认值 | autoindex_exact_size on; |
| 位置 | http、server、location |
(3)autoindex_format:设置目录列表的格式
| 语法 | autoindex_format html | xml|json|jsonp; |
| 默认值 | autoindex_format html; |
| 位置 | http、server、location |
(4)v>autoindex_localtime:对应HTML格式,是否在目录列表上显示时间
| 语法 | autoindex_localtime on | off; |
| 默认值 | autoindex_localtime off; |
| 位置 | http、server、location |
location /download{ root /usr/local; autoindex on; autoindex_exact_size on; autoindex_format html; autoindex_localtime on; }
nginx的用户认证模块
| 语法 | auth_basic string | off; |
| 默认值 | auth_basic off; |
| 位置 | http、server、location、limit_except |
| 语法 | auth_basic_user_file file; |
| 默认值 | - |
| 位置 | http、server、location、limit_except |
location /download{ root /usr/local; autoindex on; autoindex_exact_size on; autoindex_format html; autoindex_localtime on; auth_basic 'please input your auth'; auth_basic_user_file htpasswd; }
2、我们需要使用htpasswd工具生成
yum install -y httpd-tools htpasswd -c /usr/local/nginx/conf/htpasswd username // 创建一个新文件记录用户名和密码 htpasswd -b /usr/local/nginx/conf/htpasswd username password //在指定文件新增一个用户名和密码 htpasswd -D /usr/local/nginx/conf/htpasswd username // 从指定文件删除一个用户信息 htpasswd -v /usr/local/nginx/conf/htpasswd username // 验证用户名和密码是否正确