一、反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
1. 通过反向代理访问tomcat下的项目
修改nginx安装目录下的nginx.conf配置文件,当在浏览器访问centOS的IP:80时,自动代理跳转到tomcat
//启动tomcat服务
cd /usr/local/src/tomcat/apache-tomcat-7.0.57/bin
./startup.sh
//修改配置,修改前先关闭服务 ./nginx -s stop
cd /usr/local/nginx/conf
vi nginx.conf进入编辑添加:
proxy_pass http://localhost:8080;
退出保存 Esc :wq
//启动nginx
cd /usr/local/nginx/sbin
./nginx
在tomcat下的webapps中上传一个项目,在浏览器输入 http://192.168.16.128/damishop/index.html访问到页面,即可通过nginx访问tomcat及其项目。
2. 使用nginx反向代理,根据访问路径跳转到不同端口服务中
-
在usr/local/src下放两个tomcat,一个端口8080另一个端口8081
-
在webapps下分别放两个项目
-
添加nginx监听端口为8001,根据路径分别代理8080和8081端口号
修改代理端口号
server {
listen 8001;
server_name localhost;
location ~/damishop/ {
proxy_pass http://localhost:8080;
}
location ~/xiaomishop/ {
proxy_pass http://localhost:8081;
}
}
-
防火墙开放8001、8080、8081端口号,开启tomcat、nginx服务
-
在浏览器访问两个路径,就可以使一个nginx服务器反向代理两个tomcat进行访问
192.168.16.128:8001/xiaomishop/index.html
192.168.16.128:8001/damishop/index.html
二、负载均衡
负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。
nginx负载均衡分配策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权重默认为 1,权重越高被分配的客户端越多 指定轮询几率weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
upstream server_pool{
server 192.168.16.128 weight=5;
server 192.168.16.129 weight=10;
}
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream server_pool{
ip_hash;
server 192.168.16.128:80;
server 192.168.16.129:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.16.128:80;
server 192.168.16.129:80;
fair;
}
1.部署两个tomcat服务器。如8080、8081
2.在每个tomcat下的webapps分别创建edu/test.html用于测试,内容可以不同
3.在nginx的配置文件进行负载均衡配置 nginx/conf/nginx.conf
upstream myserver{
server localhost:8080;
server localhost:8081;
}
server {
listen 8001;
server_name localhost;
location /{
proxy_pass http://myserver;
}
}
4.在浏览器访问IP:8001/edu/test.html,不断刷新页面,可以看出url相同,在两台服务器间进行切换
三、动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。
1.在Linux系统中上传静态资源,用于访问。在根目录下创建/data/xiaomishop文件
2.在niginx下进行配置 nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location /xiaomishop/ {
root /data/;
index index.html index.htm;
}
}
3.在浏览器通过nginx进行访问,没有tomcat也可以正常运行
192.168.16.128/xiaomishop/index.html
三、集群搭建
由多台服务器组成的集群服务器,对外有一个统一的虚拟IP地址,每台集群服务器上都装有相同的应用程序,由一个负载均衡器来分配在哪台服务器上进行操作。各个集群服务器之间是相互通信的,一旦发生故障,可以自动转移到其他服务器。
1.准备两台虚拟机
集群一般搭建在多个电脑上,这里用两台虚拟机模拟,测试可以直接复制CentOS文件,避免繁琐的搭建
2.在两台虚拟机中分别安装nginx
3.在两台虚拟机中分别安装Keepalived,显示完毕即成功。
yum install keepalived -y
4.配置Keepalived
“priority”值最大的将成为集群中的Master节点,而其他都是Backup节点
1)在充当主服务器的虚拟机中配置keepalived.conf,或者上传修改好的配置文件(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
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.16.110 ——————————>虚拟IP,保证前三位与虚拟机保持在同一网段
}
}
2)在/usr/local/src下上传指定脚本 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
3)把另一个服务区虚拟机当作从服务器,进行相关配置keepalived.conf,或者上传修改好的配置文件(/etc/keepalived/keepalived.conf)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
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.16.110 ——————————>虚拟IP,保证前三位与虚拟机保持在同一网段
}
}
4)同2)在/usr/local/src下上传指定脚本 nginx_check.sh
5.分别启动两台虚拟机中的nginx和keepalived
./nginx
systemctl start keepalived.service
6.测试,在网页输入 192.168.16.110:8001/xiaomishop/index.html,显示出项目就代表成功
7.关闭任意一个服务器,都可以正常运行。
systemctl stop keepalived.service
./nginx -s stop