搭建nginx反向代理实现动静态分离
一、实现高可用动静分离
1、部署目的
2、部署拓扑
3、实现静态页面
4、实现lvs负载均衡
5、实现动态网页功能
6、 实现nginx反向代理
7、静态结果展示
8、动态结果展示
一、实现高可用动静分离
1、部署目的
①用户访问业务时访问虚拟ip由lvs负责转发请求到业务上,采用轮询调度算法。
②用户访问虚拟ip为静态业务时lvs将业务转到nginx上处理。
③用户访问虚拟ip为动态业务时lvs将业务转到nginx上由nginx反向代理转给tomcat处理,采用轮询调度算法
2、部署拓扑
客户端:192.168.217.150
虚拟IP: 192.168.217.101
lvs-master:192.168.217.150
lvs-slave:192.168.217.102
nginx01:192.168.217.103
tomcat01:192.168.217.103
nginx02:192.217.217.104
tomcat02:192.168.217.104
3、实现静态页面
nginx01、nginx02操作: systemctl stop firewalld sentenforce 0 #关闭防火墙及selinux安全验证 yum install epel-release -y yum install nginx -y #安装epel扩展源,然后安装nginx并启动 echo nginx01 test >/usr/share/nginx/html/index.html echo nginx02 test >/usr/share/nginx/html/index.html #修改nginx主页内容,nginx01修改为nginx01 test,nginx02修改nginx02 test curl 192.168.30.12 curl 192.168.30.13 #分别在俩台主机测试能否互相访问到定义的静态内容 ifconfig ens33:1 192.168.30.100 netmask 255.255.255.0 #2台nginx添加虚拟网卡lo:0并配置ip route add -host 192.168.30.100 dev ens33:1 #添加路由192.168.30.100走ens33:1网卡 vim /etc/sysctl.conf #编辑内核参数,添加内容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 #保存退出后查看配置 sysctl -p #查看内核参数是否配置完成
1、关闭防火墙
2、#安装epel扩展源,然后安装nginx并启动
#修改nginx主页内容,nginx01修改为nginx01 test,nginx02修改nginx02 test
#分别在俩台主机测试能否互相访问到定义的静态内容
#2台nginx添加虚拟网卡lo:0并配置ip
#添加路由192.168.217.101走ens33:1网卡
#编辑内核参数,添加内容
#查看内核参数是否配置完成
4、实现lvs负载均衡
lvs-master、lvs-slave执行: yum install ipvsadm -y #yum安装ipvsadm服务,即LVS负载均衡的真实服务名 systemctl start ipvsadm.service #开启ipvsadm服务,此步骤启动服务报错 systemctl status ipvsadm.service>1.txt cat 1.txt #将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图 ipvsadm-save>/etc/sysconfig/ipvsadm #报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。 systemctl restart ipvsadm.service #重新启动ipvsadm成功 yum install keepalived.x86_64 -y #安装keepalived.x86_64 vim /etc/sysctl.conf #编辑内核文件 添加内容: net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 #保存退出 sysctl -p #查看添加内核内容有则成功 vim keepalived.conf #编辑配置文件 修改内容: global_defs模块中 smtp_server 127.0.0.1 #改为127.0.0.1即改为本机 router_id LVS_01 #第一条LVS名称改为LVS_01 #vrrp_skip_check_adv_addr #vrrp_strict #vrrp_garp_interval 0 #vrrp_gna_interval 0 #以上4行安全机制添加#号注释掉 virtual_ipaddress { 192.168.217.101 } #虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。 virtual_server 192.168.217.101 80 { #虚拟ip地址改为配置的虚拟ip和web服务端口号 delay_loop 6 lb_algo rr lb_kind DR #模式改为DR模式即直连模式 persistence_timeout 50 protocol TCP real_server 192.168.217.103 80 { #第一台真实ip地址和web服务端口号 weight 1 TCP_CHECK { #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器 connect_port 80 #添加连接端口80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.217.104 80 { #第二台真实ip地址和web服务端口号 weight 1 TCP_CHECK { #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器 connect_port 80 #添加连接端口80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } #俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图 scp keepalived.conf 192.168.217.102:/etc/keepalived/ LVS_02配置文件修改: #将配置好的配置文件传到LVS_02服务器上 #第一步修改 router_id LVS_02 名称改为LVS_02 #第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级 #其他不用修改保存即可 systemctl restart ipvsadm keepalived #重启服务 ipvsadm -ln 显示内容: TCP 192.168.217.101:80 rr persistent 50 -> 192.168.217.103:80 Route 1 0 0 -> 192.168.217.104:80 Route 1 0 1 #查看有2个真实服务器的ip即可,注意二台真实服务器的80端口必须开着才能都检测到
lvs-master、lvs-slave执行:
#yum安装ipvsadm服务,即LVS负载均衡的真实服务名
#开启ipvsadm服务,此步骤启动服务报错
-
#安装keepalived.x86_64
#编辑内核文件
#查看添加内核内容有则成功
#编辑配置文件
5、实现动态网页功能
tomcat01、tomcat02执行: yum install tomcat -y systemcat start tomcat #安装并启动tomcat服务 cd /var/lib/tomcat/webapps mkdir test cd test vim index.jsp 添加动态页面内容: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>test</title> </head> <body> <% out.println("动态页面:test tomcat01");%> #页面输出内容为test tomcat01,tomcat02服务器上则将01改为02方便查看实验效果 </body> </html> #创建动态资源页面 vim /etc/tomcat/server.xml #修改主配置文件内容约125行到129行,原有内容不需要更改,对比此段内容添加即可,如下截图中 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlNamespaceAware="false"> <Context docBase="/var/lib/tomcat/webapps/test" #指定自己的tomcat页面访问文件路径 path="" reloadable="true" /> systemctl restart tomcat #重启服务在本机分别输入192.168.217.102:8080和192.168.217.103:8080测试能否访问到内容
6、 实现nginx反向代理
nginx01、nginx02执行: vim /etc/nginx/conf.d/upstream.conf #直接在nginx子配置文件夹中创建一个新的子配置文件,因为是yum安装无须在主配置文件中指定子配置文件 文件内容: upstream nginxtest{ server 192.168.217.102:8080; server 192.168.217.103:8080; } #反向代理模块,将2个tomcat的ip和端口号写入其中,反代模块名称为nginxtest server { location / { root html; index index.html index.htm; } #server模块中的第一个location模块,指定了根为html,支持主页文件类型三个,注意分号结尾 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { root /usr/share/nginx/html; } #server模块中第二个location模块,配置不区分大小写的任意开头只要以.()括号内的任意一个内容结尾则为静态资源访问/usr/share/nginx/html下的页面 location ~ .*\.jsp$ { proxy_pass http://nginxtest; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #server模块中第三个location模块,配置不区分大小写的任意开头只要.jsp结尾就由nginx反向代理模块nginxtest进行处理 }
7、静态结果展示
客户端访问虚拟ip192.168.217.101,每次访问页面在nginx01和nginx02中轮询