搭建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、实现静态页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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并启动
1 | #修改nginx主页内容,nginx01修改为nginx01 test,nginx02修改nginx02 test |
1 | #分别在俩台主机测试能否互相访问到定义的静态内容 |
1 | #2台nginx添加虚拟网卡lo:0并配置ip |
1 | #添加路由192.168.217.101走ens33:1网卡 |
1 | #编辑内核参数,添加内容 |
#查看内核参数是否配置完成
4、实现lvs负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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端口必须开着才能都检测到 |
1 | lvs-master、lvs-slave执行: |
1 | #yum安装ipvsadm服务,即LVS负载均衡的真实服务名 |
1 | #开启ipvsadm服务,此步骤启动服务报错 |
-
#安装keepalived.x86_64
#编辑内核文件
#查看添加内核内容有则成功
#编辑配置文件
5、实现动态网页功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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反向代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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中轮询
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现