动静分离+多实例实验(nginx+tomcat)

Nginx服务器:192.168.188.14:80

Tomcat服务器1:192.168.188.11:80

Tomcat服务器2:192.168.188.12:8080   192.168.188.12:8081

  1. 部署Nginx负载均衡器
    1. 关闭防火墙
      systemctl stop firewalld
      setenforce 0

    2. 安装依赖
      yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

    3. 创建用于运行的nginx用户
      useradd -M -s /sbin/nologin nginx

    4. 解压
      cd /opt
      tar zxvf nginx-1.22.0.tar.gz

    5. 自定义安装设置

      cd nginx-1.12.0/
      ./configure \
      --prefix=/usr/local/nginx \
      --user=nginx \
      --group=nginx \
      --with-file-aio \ #启用文件修改支持
      --with-http_stub_status_module \ #启用状态统计
      --with-http_gzip_static_module \ #启用 gzip静态压缩
      --with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
      --with-http_ssl_module #启用 SSL模块,提供SSL加密功能
      --with-stream #启用 stream模块,提供4层调度

      ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream
    6. 编译安装
      make && make install

    7. 将nginx命令添加到系统命令
      ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

    8. 将nginx服务添加到系统服务
      vim /lib/systemd/system/nginx.service

      [Unit]
      Description=nginx
      After=network.target
      [Service]
      Type=forking
      PIDFile=/usr/local/nginx/logs/nginx.pid
      ExecStart=/usr/local/nginx/sbin/nginx
      ExecrReload=/bin/kill -s HUP $MAINPID
      ExecrStop=/bin/kill -s QUIT $MAINPID
      PrivateTmp=true
      [Install]
      WantedBy=multi-user.target

      chmod 754 /lib/systemd/system/nginx.service
      systemctl start nginx.service
      systemctl enable nginx.service

  2. 部署Tomcat服务器

    1. 关闭防火墙
      systemctl stop firewalld
      setenforce 0

    2. 安装JDK
      cd /opt
      rpm -ivh jdk-8u201-linux-x64.rpm

    3. 设置JDK环境变量
      vim /etc/profile.d/java.sh

      export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
      export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
      export PATH=$JAVA_HOME/bin:$PATH


      source /etc/profile.d/java.sh
      检查无误:

    4. 解压Tomcat安装包
      cd /opt
      tar zxvf apache-tomcat-8.5.16.tar.gz
      移动并重命名
      mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat

      注意:如果本机是用作Tomcat服务器2,也就是多实例的服务器,为了后续使用方便,请使用mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat1

      重启服务
      /usr/local/tomcat/bin/shutdown.sh
      /usr/local/tomcat/bin/startup.sh
      检查无误

  3. Tomcat服务器1配置

    1. 创建测试的应用目录
      mkdir /usr/local/tomcat/webapps/test
      写一个页面
      vim /usr/local/tomcat/webapps/test/index.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>
      <head>
      <title>JSP test1 page</title>   #指定为 test1 页面
      </head>
      <body>
      <% out.println("动态页面 1,http://www.test1.com");%>
      </body>
      </html>

    2. 修改配置文件server.xml
      vim /usr/local/tomcat/conf/server.xml
      因为新增的Host的name也是localhost和原本的重名了,所以把原本的删掉

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
      </Host>

    3. 重启服务
      /usr/local/tomcat/bin/shutdown.sh
      /usr/local/tomcat/bin/startup.sh

  4. Tomcat服务器2配置

    1. 如果在第2-(4)步安装Tomcat服务器2上的Tomcat时创建了/usr/local/tomcat/tomcat1的话,这一步只需要cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

    2. 配置多实例tomcat环境变量
      vim /etc/profile.d/tomcat.sh

      #tomcat1
      export CATALINA_HOME1=/usr/local/tomcat/tomcat1
      export CATALINA_BASE1=/usr/local/tomcat/tomcat1
      export TOMCAT_HOME1=/usr/local/tomcat/tomcat1#tomcat2
      export CATALINA_HOME2=/usr/local/tomcat/tomcat2
      export CATALINA_BASE2=/usr/local/tomcat/tomcat2
      export TOMCAT_HOME2=/usr/local/tomcat/tomcat2


      source /etc/profile.d/tomcat.sh

    3. 修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

      vim /usr/local/tomcat/tomcat2/conf/server.xml
      <Server port="8006" shutdown="SHUTDOWN"> #22行,修改Server prot,默认为8005 -> 修改为8006
      <Connector port="8081" protocol="HTTP/1.1" #69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
      <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> #116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

    4. 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
      vim /usr/local/tomcat/tomcat1/bin/startup.sh
      在对应位置添加

      export CATALINA_BASE=$CATALINA_BASE1
      export CATALINA_HOME=$CATALINA_HOME1
      export TOMCAT_HOME=$TOMCAT_HOME1

      vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
      添加的位置和内容和上面一样

      vim /usr/local/tomcat/tomcat2/bin/startup.sh
      在对应位置添加

      export CATALINA_BASE=$CATALINA_BASE2
      export CATALINA_HOME=$CATALINA_HOME2
      export TOMCAT_HOME=$TOMCAT_HOME2

      vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
      添加的位置和内容和上面一样

    5. 启动各个实例

      /usr/local/tomcat/tomcat1/bin/startup.sh
      /usr/local/tomcat/tomcat2/bin/startup.sh
      查看无误

    6. 创建两个应用程序
      mkdir /usr/local/tomcat/tomcat1/webapps/test
      mkdir /usr/local/tomcat/tomcat2/webapps/test

    7. 给两个应用程序分别写一个页面
      vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>
      <head>
      <title>JSP test2 page</title>   #指定为 test2 页面
      </head>
      <body>
      <% out.println("动态页面 2,http://www.test2.com");%>
      </body>
      </html>


      vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>
      <head>
      <title>JSP test3 page</title>   #指定为 test3 页面
      </head>
      <body>
      <% out.println("动态页面 3,http://www.test3.com");%>
      </body>
      </html>

    8. 修改两个实例的主配置文件

      vim /usr/local/tomcat/tomcat1/conf/server.xml
      这里同样要把之前同名的Host删掉,并添加以下内容

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
      </Host>

      vim /usr/local/tomcat/tomcat2/conf/server.xml
      这里同样要把之前同名的Host删掉,并添加以下内容

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
      </Host>

    9. 重启两个Tomcat实例
      /usr/local/tomcat/tomcat1/bin/shutdown.sh
      /usr/local/tomcat/tomcat1/bin/startup.sh

      /usr/local/tomcat/tomcat2/bin/shutdown.sh
      /usr/local/tomcat/tomcat2/bin/startup.sh

    10. 这里可以先测试一下,浏览器里查看无误再继续

  5. Nginx服务器配置

    1. 准备一个静态页面和静态图片

      echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html

      mkdir /usr/local/nginx/html/img
      再随便塞个图片到/usr/local/nginx/html,随便起个名

    2. 修改nginx主配置文件
      vim /usr/local/nginx/conf/nginx.conf
      详细说一下各项配置的原因

      #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大upstream tomcat_server {server 192.168.188.11:8080 weight=1;server 192.168.188.12:8080 weight=1;server 192.168.188.12:8081 weight=1;}server {listen 80;server_name www.kgc.com;charset utf-8;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
      #设置后端的Web服务器可以获取远程客户端的真实IP
      ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。proxy_set_header HOST $host;   
      ##把$remote_addr赋值给X-Real-IP,来获取源IPproxy_set_header X-Real-IP $remote_addr;
      ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}

    3. 重启服务
      systemctl restart nginx

  6. 测试

    1. 测试静态页面效果
      页面无误

      图片无误

    2. 测试负载均衡效果,不断刷新浏览器测试
      浏览器访问http://192.168.188.14/index.jsp


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224689.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自研分布式IM-HubuIM RFC草案

HubuIM RFC草案 消息协议设计 基本协议 评估标准 【性能】协议传输效率&#xff0c;尽可能降低端到端的延迟&#xff0c;延迟高于200ms用户侧就会有所感知 【兼容】既要向前兼容也要向后兼容 【存储】减少消息包的大小&#xff0c;降低空间占用率&#xff0c;一个字节在亿…

抖音本地生活服务商申请要多久审核通过?

近年来&#xff0c;随着互联网的普及和社交媒体的兴起&#xff0c;本地生活服务行业也迎来了巨大的发展机遇。作为最受欢迎的短视频平台之一&#xff0c;抖音也不例外。抖音本地生活服务商申请要多久审核通过&#xff1f;这是许多想要加入抖音本地服务行业的人们最关心的问题之…

paddleocr笔记

PP-OCRv1 PP-OCR中&#xff0c;对于一张图像&#xff0c;需要完成以下3个步骤提取其中的文字信息&#xff1a; 使用文本检测方法&#xff0c;获取文本区域多边形信息&#xff08;PP-OCR中文本检测使用的是DBNet&#xff0c;因此获取的是四点信息&#xff09;。对上述文本多边形…

Echarts-使用渐变色填充

垂直方向的渐变 color: {type: linear,// x0,y1,柱子的颜色在垂直方向渐变x: 0,y: 1,colorStops: [// 0%处的颜色{offset: 0,color: #12c2e9,},// 50%处的颜色{offset: 0.5,color: #c471ed,},// 100%处的颜色{offset: 1,color: #f64f59,},],global: false // 缺省为 false} 水…

11.25快速排序细节,sort函数,二分使面积差最小

快速排序 i从左边开始&#xff0c;遇到大于等于x的停下来&#xff0c;j遇到小于等于x的停下来&#xff0c;然后如果i<j&#xff0c;就交换。 递归可能有两种写法&#xff0c;即开始&#xff0c;左-1&#xff0c;左&#xff0c;结束 与开始&#xff0c;右&#xff0c;右1&a…

FLASK博客系列5——模板之从天而降

我们啰啰嗦嗦讲了4篇&#xff0c;都是在调接口&#xff0c;啥时候能看到漂亮的页面呢&#xff1f;别急&#xff0c;今天我们就来实现。 来我们先来实现一个简单的页面。不多说&#xff0c;上代码。 app.route(/) def index():user {username: clannadhh}return <html>&…

【探索Linux】—— 强大的命令行工具 P.17(进程信号 —— 信号保存 | 阻塞信号 | sigprocmask() | sigpending() )

阅读导航 引言一、阻塞信号1. 信号相关常见概念&#xff08;1&#xff09;信号递达&#xff08;2&#xff09;信号未决&#xff08;3&#xff09;阻塞信号&#xff08;4&#xff09;忽略信号 2. 信号在内核中的表示⭕信号在内核中的表示示意图 3. sigset_t &#xff08;数据类型…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

【高并发写】库存系统设计

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

在CI/CD中使用submodule

背景信息 客户的submodule使用的是ssh协议拉取 前置操作 gitlab添加子模块 git clone ssh://gitkube.bdeet.top:2222/cicd/123.git cd 123/ ls -la git submodule add ssh://gitkube.bdeet.top:2222/approve/test-1.git git submodule add ssh://gitkube.bdeet.top:2222/mr…

java学习part16代码块

108-面向对象(高级)-类的成员之四&#xff1a;代码块_哔哩哔哩_bilibili 1. 代码块只能static修饰&#xff0c;不存在权限修饰。 因为它是在某种情况下自动执行的&#xff0c;不存在调用的情况。 非静态代码块随着对象创建自动执行&#xff08;一个对象执行一次&#xff09;…

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…