ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

反向代理是什么?利用Nginx+Tomcat来搭建反向代理的负载均衡群集

2021-12-18 20:02:10  阅读:96  来源: 互联网

标签:Tomcat tomcat -- 代理 nginx 反向 usr 服务器 root


目录

前言——反向代理是什么

  • 要说反向代理是什么,这里就不得不提到代理是什么
    代理: 当客户机访问服务器时,中间会有一个代理服务器,客户机经过代理服务器访问服务器的这个过程就是代理,就像一些专卖店,比如apple的专卖店扮演的角色就是代理服务器,而apple的总公司扮演的角色就是被访问服务器,去买apple的顾客扮演的角色就是客户机
  • 知道了代理是什么,而下一个就是正向代理
    正向代理: 正向代理就是最常用的代理模式,客户端要清楚要访问的服务器的ip地址,当客户机访问目标服务器时会经过代理服务器,然后代理服务器去被访问的服务器发送请求,再由被访问的服务器回复代理服务器,由代理服务器回复客户机,这个过程中被访问的服务器全程都不知道客户机的真实ip,而客户机却知道被访问服务器的ip,这是因为正向代理服务器屏蔽了或者隐藏了客户机的真实ip
  • 知道了正向代理是什么,那么就是最后的反向代理
    反向代理: 反向代理的代理服务器一般使用的都是Nginx来搭建,这里的Nginx扮演的角色像是一个转发器,在他的后端,一般会搭建多台轻量级的tomcat服务器,并且基于某种算法来实现Tomcat服务器的来回切换。客户机访问的是Nginx代理服务器的地址,由Nginx服务器转发给后面的Tomcat服务器,之后Tomcat服务器回应Nginx服务器,Nginx服务器再回应客户机,因为真实服务器放在Nginx服务器的后面,从而隐藏了真实服务器的ip地址,也实现了负载均衡。
    以上说明都是个人理解,如有错误,希望及时在评论区回复,谢谢

一、反向代理示例图

在这里插入图片描述

二、实验环境

主机名ip地址扮演角色
Nginx192.168.100.7Nginx服务器
Tomcat-01192.168.100.8Tomcat服务器
Tomcat-02192.168.100.9Tomcat服务器

三、实验要求

让客户机在访问的时候,无需得知Tomcat服务器的真实ip,就可以访问Tomcat服务器的页面,并且可以让两台Tomcat服务器的页面来回切换,实现负载均衡

四、实验步骤

(1)首先先搭建两台Tomcat服务器

******两台Tomcat服务器搭建步骤相同,但是网页内容不同,这样测试时方便辨认
******(1)做基础配置
[root@centos7-008 ~]# hostnamectl set-hostname tomcat-01
[root@centos7-008 ~]# su
[root@tomcat-01 ~]# systemctl stop firewalld
[root@tomcat-01 ~]# setenforce 0
setenforce: SELinux is disabled
[root@tomcat-01 ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
******(2)搭建tomcat服务器
[root@tomcat-01 ~]# yum -y remove java  (检查是否已经安装java)
已加载插件:fastestmirror
参数 java 没有匹配
不删除任何软件包
[root@tomcat-01 ~]# ll (上传java的软件包)
总用量 177124
-rw-------. 1 root root      1262 9月   3 18:18 anaconda-ks.cfg
-rw-r--r--  1 root root 181367942 2月   1 00:15 jdk-8u91-linux-x64.tar.gz
[root@tomcat-01 ~]# tar xf jdk-8u91-linux-x64.tar.gz   (解压)
[root@tomcat-01 ~]# mv jdk1.8.0_91/ /usr/local/java (移动到java目录)
[root@tomcat-01 ~]# vim /etc/profile.d/java.sh  (编写Java脚本,优化执行路径)
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin 
[root@tomcat-01 ~]# chmod +x /etc/profile.d/java.sh   (添加可执行权限)
[root@tomcat-01 ~]# source /etc/profile.d/java.sh     (执行脚本)
[root@tomcat-01 ~]# echo $PATH  (查看是否优化成功)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@tomcat-01 ~]# ll  (上传tomcat的软件包)
总用量 186324
-rw-------. 1 root root      1262 9月   3 18:18 anaconda-ks.cfg
-rw-r--r--  1 root root   9417469 2月   1 00:21 apache-tomcat-8.5.16.tar.gz
-rw-r--r--  1 root root 181367942 2月   1 00:15 jdk-8u91-linux-x64.tar.gz
[root@tomcat-01 ~]# mkdir /usr/local/tomcat  (创建主目录)
[root@tomcat-01 ~]# tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/tomcat/ (解压)
[root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh  (启动)
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat-01 ~]# netstat -anpt | grep java  (查看端口号确认已经成功启动)
tcp6       0      0 :::8080                 :::*                    LISTEN      1376/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1376/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      1376/java  
******(3)在两台tomcat服务器上分别写上不同的网页
[root@tomcat-01 ~]# mkdri -pv /web/webapp1
bash: mkdri: 未找到命令
[root@tomcat-01 ~]# mkdir -pv /web/webapp1
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"
[root@tomcat-01 ~]# vim /web/webapp1/index.jsp  (网页写的不一样就可以)
写入
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
     <title> JSP test1 page </title>
  </head>
  <body>     <% out.println("Welcome to Tomcat-001 !!!!!!");%>  
  </body>
</html>
保存退出
[root@tomcat-01 ~]# vim /usr/local/tomcat/apache-tomcat-8.5.16/conf/server.xml (编写配置文件)
修改为:
。。。。。。
148       <Host name="localhost"  appBase="/web"
149             unpackWARs="true" autoDeploy="true">
150 <Context docBase="/web/webapp1" path="" reloadable="false"></Context> 
151         <!-- SingleSignOn valve, share authentication between web applications
。。。。。。
保存退出
******(4)重新启动tomcat服务
[root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/shutdown.sh  (关闭)
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar
[root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh  (启动)
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-8.5.16
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat-01 ~]# netstat -antp | grep java  (检查端口确认服务已经成功启动)
tcp6       0      0 :::8080                 :::*                    LISTEN      1463/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1463/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      1463/java  

利用测试机分别访问两个tomcat服务器,测试是否可以正常访问
tomcat1
tomcat2
成功后开始搭建Nginx服务器

(2)搭建Nginx服务器

******(1)先做基础配置
[root@centos7-007 ~]# hostnamectl set-hostname Nginx
[root@centos7-007 ~]# su
[root@nginx ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# setenforce 0
setenforce: SELinux is disabled
******(2)安装Nginx必要组件和创建组等
[root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel
。。。。。。
完毕!
[root@nginx ~]# groupadd www 
[root@nginx ~]# useradd -g www -s /bin/false www (指定登录shell为/bin/false)
————————————————————————————————————华丽分割线————————————————————————————————————
这个时候有人就会想一般不是会指定为/sbin/nologin嘛
/bin/false和/sbin/nologin的区别:
/bin/false是最严格的禁止login选项,一切服务都不能用
而/sbin/nologin只是不能登录系统而已
—————————————————————————————————————————————————————————————————————————————————
******(3)上传源码包,配置、编译、安装
[root@nginx ~]# ll
总用量 964
-rw-------. 1 root root   1220 9月   3 18:16 anaconda-ks.cfg
-rw-r--r--  1 root root 980831 2月   1 00:49 nginx-1.12.0.tar.gz
[root@nginx ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/nginx-1.12.0/
[root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module  &&make &&make install
————————————————————————————————————华丽分割线——————————————————————————————————————
配置模块详解
(1)--user=www --group=www          指定运行的用户、组
(2)--with-file-aio                 启用文件修改支持
(3)--with-http_stub_status_module  启用状态统计
(4)--with-http_gzip_static_module  启用gzip静态压缩
(5)--with-http_flv_module          启用flv模块,提供寻求内存使用基于时间的偏移量文件 
(6)--with-http_ssl_module          启用ssl模块
———————————————————————————————————————————————————————————————————————————————————
******(4)编辑nginx的配置文件
[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf (添加)
。。。。。。
 34  upstream tomcat_server {
 35           server 192.168.100.8:8080 weight=1;
 36          server 192.168.100.9:8080 weight=1;
 37   }      
 38
。。。。。。 (下面的location写一个就行,可以把另一个删掉,或者在原本就有的项上修改)
 46    location / {
 47               root   html;
 48               index  index.html index.htm;
 49               proxy_pass http://tomcat_server;
 50           }   
 51       
。。。。。。    
保存退出
[root@nginx nginx-1.12.0]# /usr/local/nginx/sbin/nginx -t (检查nginx语法是否正确)
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok (ok表示正确)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx nginx-1.12.0]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (启动)
[root@nginx nginx-1.12.0]# netstat -antp | grep nginx (查看端口确认已经启动)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3978/nginx: master  

(3)测试

使用测试机访问Nginx服务器192.168.100.7,确认无需得知Tomcat的真实ip也可以访问Tomcat服务器的页面,并且查看是否会自动切换页面
第一次访问
第一次访问
第二次访问
第二次访问
客户机通过nginx服务器成功访问到了Tomcat服务器,并且可以实现负载均衡。至此,Nginx+tomcat负载均衡集群已经搭建完成!

标签:Tomcat,tomcat,--,代理,nginx,反向,usr,服务器,root
来源: https://blog.csdn.net/rzy1248873545/article/details/113479349

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有