动静分离+多实例实验(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;处理数字的最常见的方式就…

csrf跨站请求伪造详解

【1】csrf跨站请求伪造的解释及解决方法 CSRF&#xff08;Cross-Site Request Forgery&#xff09;跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接 将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而…

华夏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…

linux 用户级别修改文件句柄数不生效

修改/etc/security/limits.conf 句柄数后发现无效需要执行以下操作。 1. vi /etc/ssh/sshd_config 2. StrictModes no/yes 3. UsePAM yes 4. service sshd restart 5. /etc/systemd/user.conf 新增DefaultLimitNOFILE65535 6. /etc/systemd/system.conf 新增DefaultLimitN…

logback-spring.xml的内容格式

目录 一、logback-spring.xml 二、Logback 中的三种日志文件类型 一、logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"10 seconds" ><!-- <statusListener…

C#使用WebSocket进行链接

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

《100 Java Mistakes and How to Avoid Them》笔记 1

这几日在阅读 Manning 出版社的 《100 Java Mistakes and How to Avoid Them》, 其中列举的确实是一些容易带入到代码中的错误&#xff0c;不少还是通过代码 Review 或单元测试很难发现的问题。也有些看似很弱智&#xff0c;却可能是隐匿许久的定时炸弹&#xff0c;只等某一特定…

pandas教程:Advanced GroupBy Use 高级GroupBy用法

文章目录 12.2 Advanced GroupBy Use&#xff08;高级GroupBy用法&#xff09;1 Group Transforms and “Unwrapped” GroupBys&#xff08;组变换和无包装的GroupBy&#xff09;2 Grouped Time Resampling&#xff08;分组时间重采样&#xff09; 12.2 Advanced GroupBy Use&a…

图形编辑器开发:快捷键的管理

大家好&#xff0c;我是前端西瓜哥。 快捷键操作在图形编辑器中是很高频的操作&#xff0c;能让用户快速高效地执行特定命令&#xff0c;今天讲讲图形编辑器如果管理快捷键。 编辑器 github 地址&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://b…

计算机网络:网络层

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

说说过量 tcp pure ack 的利弊

tcp 的 ack 实在太多了&#xff0c;如果互联网上 80% 报文是 tcp&#xff0c;那么其中 1/3 的报文都是 ack&#xff0c;此前写过几篇短文&#xff0c;比如 丢弃一些 pure ack 和 注入或利用 pure ack。 简单说&#xff0c;tcp 依靠 ack 提供 self-clock&#xff0c;发送 data …

ARM异常模型

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买【加群】ARM/TEE…

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实例。…