动静分离+多实例实验(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.mzph.cn/news/175173.shtml

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

相关文章

Java 基础学习(二)运算符与分支流程控制

1 运算符 1.1 运算符概述 1.1.1 运算符概述 运算符是一种告诉计算机执行特定的数学或逻辑等操作的符号。Java运算符号包括&#xff1a;数学运算符、关系运算符、逻辑运算符、赋值运算符号、字符串连接运算符。计算机本质上只能处理数字&#xff0c;处理数字的最常见的方式就…

华夏ERP信息泄露漏漏洞复现 [附POC]

文章目录 华夏ERP信息泄露漏漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 华夏ERP信息泄露漏漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#x…

好用的基于layui的免费开源后台模版layuimini

发现一个好用的后台模版 基于layui的免费开源后台模版layuimini layuimini - 基于Layui的后台管理系统前端模板 easyadmin开源项目 EasyAdmin是基于ThinkPHP6.0Layui的快速开发的后台管理系统。 演示站点 演示地址&#xff1a;跳转提示&#xff08;账号&#xff1a;admin&a…

Java实现—数据结构 1.初识集合框架

一、什么是集合框架 Java集合框架&#xff0c;又被称为容器&#xff0c;是定义在java.util包下的一组接口interfaces和其实现类classes 其主要表现为将多个元素element置于一个单元中&#xff0c; 集合框架是由若干个类组成的&#xff0c;每个类的背后就是一种数据结构&…

Jupyter Markdown 插入图片

首先截图 注意 这一步是关键的&#xff01;&#xff01; 它需要使用电脑自带的截图&#xff0c;用qq啊vx啊美图秀秀那些都不行哦。 截图之后复制&#xff1a; 然后快捷键粘贴到jupyter里面&#xff0c;它会生成一段代码&#xff08;没有代码就是说截图形式不对&#xff09;&a…

【数据结构】线段树

目录 1.概述2.代码实现2.1.聚合操作——求和2.2.聚合操作——求和、求最小值、求最大值 3.应用4.与前缀和之间的区别 更多数据结构与算法的相关知识可以查看数据结构与算法这一专栏。 1.概述 &#xff08;1&#xff09;线段树 (Segment Tree) 是一种二叉树形数据结构&#xff…

C#使用WebSocket进行链接

C#使用WebSocket进行网络链接&#xff0c;和服务端搭建一个长连接进行通信。 有两种方式&#xff1a;串口方式&#xff08;SerialPort&#xff09;和网口方式&#xff08;Socket 包括&#xff1a;TcpClient和UdpClient&#xff09; 准备&#xff1a; 1.C#使用WebSocket的一种…

计算机网络:网络层

0 本节主要内容 问题描述 解决思路 1 问题描述 两大问题&#xff08;重点&#xff0c;也是难点&#xff09;&#xff1a; 地址管理&#xff1b;路由选择。 1.1 子问题1&#xff1a;地址管理 网络上的这些主机和节点都需要使用一种规则来区分&#xff0c;就相当于是一种身…

Docker和Kubernetes:区别与优势对比

在现代软件开发和部署中&#xff0c;Docker和Kubernetes是两个备受关注的技术。本文将对Docker和Kubernetes进行比较&#xff0c;探讨它们的区别和各自的优势。 引言 在过去的几年中&#xff0c;容器技术得到了迅速的发展&#xff0c;并且在现代软件交付和部署中扮演着越来越重…

LVS-DR实验

实验前准备 DR服务器&#xff1a;192.168.188.11 192.168.188.15 NFS服务器&#xff1a;192.168.188.14 Web服务器1&#xff1a;192.168.188.12 Web服务器2&#xff1a;192.168.188.13 Vip&#xff1a;192.168.188.188 客户端&#xff1a;192.168.188.200 配置负载均衡调度…

leetCode 77.组合 + 回溯算法 (bactracking) + 剪枝 + 图解 + 笔记

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] …

Unity EventSystem的一些理解和使用

Unity的EventSystem是用于处理用户输入和交互的系统。它是Unity UI系统的核心组件之一&#xff0c;可以用于捕捉和分发各种事件&#xff0c;例如点击、拖拽、按键、射线等。 常用的属性和方法有以下这些&#xff1a; 属性&#xff1a; current: 获取当前的EventSystem实例。…

Vue简易的车牌输入键盘,可以根据需要修改

效果图如下&#xff1a; 代码如下&#xff1a; <template><div><div class"carNoBoxInput"><div style"padding: 6px;border: 2px solid #fff;border-radius: 6px;margin: 6px 3px 6px 6px;"><input class"inputBox"…

小航助学题库蓝桥杯题库stem选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

利用ambari搭建Hbase高可用

初始环境&#xff1a; 节点名称服务名ambari-hadoop1ambari-hadoop2region serverambari-hadoop3hmater、 region server 计划为ambari-hadoop1添加hmaster&#xff0c;以避免hmaster的单点故障、 step1&#xff1a;添加备用Hmaster step2&#xff1a;选择ambari-hadoop1作为…

【一周AI简讯】OpenAI奥特曼王者归来,马斯克AI模型Grok下周开放测试,ChatGPT语音对话功能向所有用户免费开放

OpenAI奥特曼王者归来&#xff0c;董事会改组 终于&#xff0c;经历大约5天的极限拉扯&#xff0c;年底AI界吃瓜大戏落下帷幕&#xff0c;奥特曼确认回归。 ChatGPT语音对话功能向所有用户免费开放 ChatGPT 语音输入最初于 9 月份推出&#xff0c;标题是“ChatGPT 现在可以看…

尚硅谷大数据项目《在线教育之实时数仓》笔记008

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第10章 数仓开发之DWS层 P066 P067 P068 P069 P070 P071 P072 P073 P074 P075 P076 P077 P078 P079 P080 P081 P082 第10章 数仓开发之DWS层 P066 第10章 数仓开发之DW…

消失的数字,旋转数组(leetcode 一题多解)

目录 一、消失的数字 思路一&#xff08;暴力求解&#xff09;代码实现&#xff1a; 思路二&#xff08;数列的思想&#xff09;代码实现&#xff1a; 思路三&#xff08;异或的运用&#xff09;代码实现&#xff1a; 二、轮转数组 思路一&#xff08;暴力求解&#xff09…

Vue3 + Scss 实现主题切换效果

Vue3 Scss 实现主题切换效果 先给大家看一下主题切换的效果&#xff1a; 像这样的效果实现起来并不难&#xff0c;只是比较麻烦&#xff0c;目前我知道的有两种方式可以实现&#xff0c;分别是 CSS 变量、样式文件切换&#xff0c;下面是该效果的核心实现方法 CSS变量 给…

电脑如何定时关机?

电脑如何定时关机&#xff1f;我承认自己是个相当粗心的人&#xff0c;尤其是在急于离开时经常会忘记关闭电脑&#xff0c;结果就是电量耗尽&#xff0c;导致电脑自动关机。而且&#xff0c;在我使用电脑的时候&#xff0c;经常需要进行软件下载、更新等任务。如果我一直坐等任…