• 45、tomcat+课后实验


    tomcat

    1、tomcat

    ·tomcatphp`一样,都是用来处理动态页面的。

    tomcat也可以作为web应用服务器,开源的。

    php .php

    tomcat .jsp

    nginx .html

    tomcat 是用Java代码写的程序,运行的是Java的web应用程序。

    tomcat的特点和功能:

    1、servlet容器:执行java servlet,服务端的java程序,处理客户端的http请求,以及响应。

    2、jsp容器,Javaserver page 这是一种动态页面的技术,可以在html的页面里面嵌入Java代码。

    3、自身也是一个http的服务器。

    4、tomcat是一个轻量级的动态页面的处理程序,高并发场景不使用。

    优化,tomcat自身的优化,以及系统的内核优化,jvm的优化。

    servlet

    • 是java语言中用来开发web应用程序的关键组件。处理http请求,生成动态内容,以及响应客户端的请求。

    • 处理http请求

    • 生成动态内容

    • 处理Java的业务逻辑

    • 会话管理,保持用户的状态信息,购物车同步,用户登录等等。

    • 也可以转发nginx的动态请求到数据库。

    jsp

    • web应用程序的界面,这个界面的语言是用Java实现的。

    • .jsp为结尾的文件

    • index.jsp

    2、tomcat的组件:

    • connector:负责对外接受和响应请求,它是tomcat于客户端沟通的一个枢纽,监听端口接受外界请求。

    • 端口:8080

    • 接收到请求之后,传递给其他组件进行处理,处理完成之后回到connector,再响应客户端。

    • container:负责处理业务逻辑,engin host contxt wrapper四个功能组成

    • engine:用来管理多个虚拟主机host,一个service只能有一个engine。

    • host:一个host就是一个主机,也可以叫站点,通过配置host,可以添加多个站点。

    • context :一个context代表一个web应用。

    • wrapper:封装器,负责处理最底层的逻辑。

    在这里插入图片描述

    service:对外提供外部服务,包含connector和container

    tomcat可以有多个service,每个service之间是互相独立的。

    3、tomcat目录的作用:

    bin:存放启动和关闭tomcat脚本的文件。startup.sh

    shutdow.sh

    conf存放tomcat的主配置文件,server.xml主配置文件

    context.xml:host的默认配置信息

    tomcat-user.xml登录时认证用户和密码的相关信息,manager文件必须要赋权修改之后才能打开。

    lib:tomacat运行时需要的jar包。一般不动

    logs:日志文件,catalina.out主日志文件。

    temp:存放tomcat运行时产生的文件。

    webapps:部署web应用的目录,类似于nginx的html。

    在这里插入图片描述

    在这里插入图片描述

    4、tomcat服务部署

    ---------------------Tomcat 服务部署-------------------------
    在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
    1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
    jdk-8u201-linux-x64.rpm
    apache-tomcat-9.0.16.tar.gz
    
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
    2.安装JDK
    cd /opt
    rpm -ivh jdk-8u201-linux-x64.rpm 
    java -version
    
    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
    
    
    
    ##解释:
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64:
    这个命令设置了一个名为JAVA_HOME的环境变量,它指向Java JDK的安装路径。
    这对于告诉系统和其他应用程序Java的安装位置非常重要。你需要将路径替换为你实际安装Java的路径。
    
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:
    这个命令设置了一个名为CLASSPATH的环境变量,它用于指定Java类的搜索路径。
    在这个命令中,.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 表示当前目录(.)
    以及Java工具库(tools.jar)和Java远程调试库(dt.jar)的路径。这些库通常包含一些Java开发所需的类。
    
    export PATH=$JAVA_HOME/bin:$PATH:
    这个命令将Java可执行文件的路径添加到系统的PATH环境变量中。
    这使得你可以在终端中直接运行Java工具,而不需要输入完整的路径。
    这将Java的bin目录添加到了PATH中,使得java、javac等命令可以直接运行。
    
    source /etc/profile.d/java.sh
    java -version
    
    ----------------------------------------------------------------------------------------------------------
    
    CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
    dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
    tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
    JDK (Java Development Kit):JDK是Java开发工具包,它是用于开发Java应用程序的软件包。
    JDK包括了编译器(javac)、调试器、各种工具、Java标准类库(Java API)、以及Java文档等。
    JDK是开发者用来创建、编译和运行Java应用程序的重要组件。
    
    JRE (Java Runtime Environment):JRE是Java运行时环境,它是用于执行Java应用程序的部分。
    JRE包括了Java虚拟机(JVM)以及Java类库(Java API),这使得用户能够在计算机上运行已编译的Java程序,
    而不需要进行开发。JRE是终端用户需要安装的部分,以便能够运行Java应用程序。
    
    JVM (Java Virtual Machine):JVM是Java虚拟机,它是Java应用程序在计算机上运行的核心组件。
    JVM负责将编译后的Java字节码(.class文件)解释或编译成本地机器码,以便计算机能够执行它。
    
    JVM提供了内存管理、垃圾回收、线程管理等功能,以确保Java程序在不同平台上具有相似的行为。
    
    首先使用文本工具编写java源代码,比如 Hello.java ;
    在命令行中,输入命令:javac 
    

    5、tomacat安装

    1、安装启动Tomcat

    安装启动Tomcat
    cd /opt
    tar zxvf apache-tomcat-9.0.16.tar.gz
    mv apache-tomcat-9.0.16 /usr/local/tomcat
    ##启动tomcat ##
    #后台启动
    /usr/local/tomcat/bin/startup.sh 
    或
    /usr/local/tomcat/bin/catalina.sh start
    	
    #前台启动
    /usr/local/tomcat/bin/catalina.sh run		
    
    netstat -natp | grep 8080
    
    浏览器访问Tomcat的默认主页 http://192.168.233.21:8080
    
    5.优化tomcat启动速度
    第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
    vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
    --117行--修改
    
    securerandom.source=file:/dev/urandom
    
    /dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依赖于系统中断,因此在系统的中断数不足时,
    /dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,
    /dev/random设备可以保证数据的随机性。 /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,
    但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。
    

    在这里插入图片描述

    ------主要目录说明----------------------------------------------------------------------------------------------
    ●bin:存放启动和关闭Tomcat的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
    ●conf:存放Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
    ① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
    ② context.xml:所有host的默认配置信息;
    ③ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
    ④ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;
    ●lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
    ●logs:存放 Tomcat 执行时的日志
    ●temp:存放 Tomcat 运行时产生的文件
    ●webapps:存放 Tomcat 默认的 Web 应用部署目录
    ●work:Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
    ●src:存放Tomcat 的源代码
    
    ●doc:存放Tomcat文档
    ----------------------------------------------------------------------------------------------------------
    
    查看manager文件:
    cd /usr/local/tomcat/webapps/manager/META-INF
    vim context.xml
    
    
       #允许所有主机访问。
    
    cd /usr/local/tomcat/conf
    
    ##设置登录页面:
    在conf,tomcat-users.xml中,添加账户密码
    
    
    
    cd ..
    cd bin
    [root@test4 bin]# ./shutdown.sh
    [root@test4 bin]# ./startup.sh
    [root@test4 bin]# ss -antp | grep 8080
    

    在这里插入图片描述

    在这里插入图片描述

    6、配置tomcat的虚拟主机

    ---------------------Tomcat 虚拟主机配置-------------------------
    很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。
    例如现在新增两个域名 www.kgc.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容。
    
    1.创建 kgc 和 benet 项目目录和文件
    mkdir /usr/local/tomcat/webapps/kgc   
    mkdir /usr/local/tomcat/webapps/benet
    echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
    echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp
    
    2.修改 Tomcat 主配置文件 server.xml  ##等于是nginx.conf
    vim /usr/local/tomcat/conf/server.xml
    --165行前--插入
    
    	
       
    
    
    	
    
    ##添加网站
    ----------------------------------------------------------------------------------------------------------
    
    Host name:主机名
    appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
    unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
    autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
    xmlValidation:是否验证xml文件执行有效性检验的标志
    xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
    
    docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
    path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ;
    reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
    

    在这里插入图片描述

    在这里插入图片描述

    
    首先使用文本工具编写java源代码,比如 Hello.java ;
    在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
    编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,
    打印 “Hello World”。
    
    
    vim Hello.java
    
    public class Hello {			
      public static void main(String[] args){
        System.out.println("Hello world!");
      }
    }
    
    javac Hello.java
    java Hello
    
    
    public: 这是一个访问修饰符,表示类是公共的,可以从其他地方访问。
    class: 关键字用于定义一个类。
    Hello: 这是类的名称,这里是一个叫做 "Hello" 的类。
    
    
    public static void main(String[] args){
    public: 访问修饰符,表示这个方法是公共的,可以从其他地方访问。
    static: 静态修饰符,表示这个方法属于类而不是实例,可以通过类名直接调用。
    void: 这是方法的返回类型,void 表示方法没有返回值。
    main: 这是方法的名称,是程序的入口点,当程序运行时会从这里开始执行。
    (String[] args): 这是方法的参数列表,args 是一个字符串数组,可以在命令行传递参数给程序。
    
    System.out.println("Hello world!");
    System.out: System 是一个类,out 是这个类的一个静态成员,它代表标准输出流。
    println: 这是输出方法的名称,它会在控制台输出一行内容。
    "Hello world!": 这是要输出的内容,是一个字符串。
    
    
    

    7、tomcat的优化:

    tomcat自身的优化

    内核优化

    jvm优化

    tomcat的并发处理能力不强,大项目不使用tomcat作为转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用)。动静分离。

    7.1、优化tomcat的启动速度

    在这里插入图片描述

    在这里插入图片描述

    file:/dev/urandom,—非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态。所以处理速度相对比较快。

    如果对应用的安全性要求比较高,/dev/random

    默认配置不适合生成环境,可能频繁的出现假死,需要不停的重启。

    根据生产环境的实际情况,自行测试。

    port 8080 http

    8443 https 443

    接受客户端https的请求

    
    
    • maxThreads:tomcat使用线程来处理接收请求的个数。tomcat最多可以创建多少个线程。默认200个,500,1000。
    • minSpareThreads:最小空闲数线程,就是有没有使用,最少开启线程数,tomcat开启之后,没人使用也会有进程待命,默认值10。
    • maxSpareThreads:最大空闲数线程,一旦线程总数超过这个值,tomcat就会关闭不再需要的线程,默认就是-1,不限制,一般不设置。
    • connectionTimeout="20000"网络连接超时时间,单位是亳秒,设置为0,永不超时。默认即可200000ms。
    • enableLookups:是否支持反向解析,true,false。
    • 提高处理速度。
    • disableUplaodTimeout:上传时是否使用超时时间机制,10s,true和false。true关闭,false开启。
    • connectionUplaodTimeout:上传的超时时间。先得打开超时限制,再设置时间。

    在这里插入图片描述

    • acceptCount:当所有可用的请求的线程都被使用时,可用接入请求的最大队列长度,超过了这个数字的请求将不予处理(直接丢弃),默认100个
    • compression:是否对响应数据进行压缩,on开启,off就是关闭。
    • 开启压缩之后,可以有效减少页面的大小(文本无效。图片,音频,视频)一般可用减少1/3,节省带宽,默认off。
    • compression=“on”
    • compressionMinSize=“”:表示响应压缩的最小值,只有响应报文大于这个值才会压缩。如果开启了压缩,默认值时2048。
    • noCompressionUserAgents="浏览器名称"对于这些浏览器,不启用压缩。
    • compressableMimeType="text/plain,video/mp4"压缩类型,指定对哪些类型的文件进行压缩。

    7.2、常用的页面类型:

    • 文本类型:text/plain,text/html,text/css,text/javascript
    • 图片类型:image/jpg,image/jpeg,img/gif
    • 音频:audio/ogg,wav,mpeg
    • 视频:video/mp4,webm,rmvb,quicktime。
    • 应用程序:application/pdf、json、xml。

    7.3、内核优化:

    系统安全的优化补齐。

    内核优化的配置文件:

    1、打开文件数的限制,系统初始化的第一步要做的事情--------vim /etc/security/limits.conf。

    2、内核参数文件---------vim /etc/sysctl.conf

    sysctl -a

    sysctl -c

    net.ipv4.ip_forward=0/1  禁用或者开启数据包的转发功能,要做路由器必须打开,0是关,1是开。
    
    net.ipv4.tcp_max_tw_buckets=2000 允许timewait的最大数量2000。
    
    net.ipv4.tcp_sack=1启用有选择的应答,提高tcp的处理性能。
    
    net.core.netdev_max_backlog=262144 (字节) 网络接收数据包队列的最大的大小。
    
    vm.swappiness=0 ,关闭内存的交换行为,不使用交换分区,k8s默认就不能使用交换分区,否则会报错。
    
    net.ipv4.tcp_max_orphans:系统允许的最大的tcp连接数量。
    
    net.ipv4.ip_local_port_range=1024 65000
    
    1024-65000设定系统的端口范围。
    
    net.ipv4.tcp_fin_timeout=10 设置tcp关闭连接的超时时间。
    
    net.ipv4.tcp_keepalive_time:设置tcp的keepalive包探测包的发送频率,以检测连接状态。
    

    记住上面的,下面了解

    
    kernel.sysrq = 0: 禁用了内核的SysRq功能,SysRq允许在系统崩溃或出现问题时执行一些调试操作。
    
    kernel.core_uses_pid = 1: 设置核心转储文件名中包含进程ID,有助于标识是哪个进程导致了核心转储。
    
    kernel.msgmnb 和 kernel.msgmax: 增加IPC消息队列的默认和最大大小,用于进程间通信。
    
    kernel.shmmax 和 kernel.shmall: 调整共享内存的最大大小和分配页面数。
    
    net.ipv4.ip_forward = 0: 禁用IP数据包的转发功能,通常用于不充当路由器的系统。
    
    net.ipv4.conf.default.rp_filter 和 net.ipv4.conf.all.rp_filter: 控制反向路径过滤,提高网络安全性。
    
    net.ipv4.icmp_echo_ignore_all: 允许或禁止系统响应ping请求。
    
    net.ipv4.icmp_echo_ignore_broadcasts: 禁止系统对广播和多播地址的ICMP回显和时间戳请求作出响应。
    
    net.ipv4.conf.default.accept_source_route: 不接受源路由,增加网络安全性。
    
    net.ipv4.tcp_syncookies = 1: 启用SYN Cookies,保护系统免受TCP SYN 攻击。
    
    net.ipv4.tcp_max_tw_buckets = 6000: 设置允许的TIME_WAIT套接字最大数量,避免服务器性能下降。
    
    net.ipv4.tcp_sack = 1: 启用有选择的应答(SACK)来提高TCP性能。
    
    net.ipv4.tcp_window_scaling = 1: 启用TCP窗口缩放功能,允许大窗口的TCP传输。
    
    net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 调整TCP套接字读取和写入缓冲区大小。
    
    net.ipv4.tcp_mem: 设置TCP缓冲区的最小、默认和最大值。
    
    net.core.wmem_default, net.core.rmem_default, net.core.rmem_max, net.core.wmem_max: 调整网络核心
    缓冲区的大小。
    
    net.core.netdev_max_backlog: 控制网络接口接收数据包的排队队列大小。
    
    net.ipv4.tcp_max_orphans: 设置系统允许的孤立TCP连接最大数量。
    
    net.ipv4.tcp_max_syn_backlog: 控制系统允许的三次握手队列长度。
    
    net.ipv4.tcp_synack_retries 和 net.ipv4.tcp_syn_retries: 设置SYN-ACK和SYN请求的重试次数。
    
    net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse: 启用TIME_WAIT套接字快速回收和重用。
    
    net.ipv4.tcp_fin_timeout: 设置TCP连接FIN(关闭连接)的超时时间。
    
    net.ipv4.tcp_keepalive_time: 设置TCP keepalive探测包发送频率,以检测连接状态。
    
    net.ipv4.ip_local_port_range: 设置本地端口范围,用于分配本地应用程序端口。
    
    net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6: 禁用IPv6。
    
    net.netfilter.nf_conntrack_max 和其他 net.netfilter.nf_conntrack_*: 控制连接跟踪和防火墙相关设置。
    
    net.nf_conntrack_max: 设置最大连接跟踪项数。
    
    vm.overcommit_memory = 0: 控制内存超额分配策略,避免OOM killer杀掉进程。
    
    vm.swappiness = 0: 设置内存交换行为,降低内存交换。
    
    fs.file-max = 999999: 设置进程可以同时打开的最大文件句柄数。
    
    net.ipv4.tcp_max_tw_buckets = 6000: 设置操作系统允许的TIME_WAIT套接字最大数量。
    
    net.ipv4.ip_local_port_range = 1024 65000: 设置系统允许的本地端口范围。
    
    net.ipv4.tcp_tw_recycle = 1: 启用TIME_WAIT套接字快速回收。
    
    net.ipv4.tcp_tw_reuse = 1: 允许TIME-WAIT套接字重用。
    
    net.ipv4.tcp_syncookies = 1: 启用SYN Cookies,防止TCP SYN 攻击。
    
    net.core.somaxconn = 40960: 设置最大监听队列长度,用于控制最大并发连接数。
    
    net.core.netdev_max_backlog = 262144: 设置每个网络接口接收数据包队列的最大大小。
    
    net.ipv4.tcp_max_syn_backlog = 262144: 设置接受SYN请求队列的最大长度。
    
    net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 设置TCP套接字读取和写入缓冲区的最小、默认和最大大小。
    
    net.core.rmem_default, net.core.wmem_default, net.core.rmem_max, net.core.wmem_max: 设置内核套接字接收和
    发送缓冲区大小。
    
    net.ipv4.tcp_syncookies = 1: 设置启用SYN Cookies,用于解决TCP SYN 攻击。
    

    7.4、jvm的优化

    在这里插入图片描述

    JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 
    cygwin=false
    

    解释:面试会问

    -Xms2048m:java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配的高一点。
    
    -Xmx2048m:java堆的最大值,也就是jvm的最大内存,取决于物理内存的大小,官方建议设置成和xms一样的值,设置成物理内存的一半
    
    -Xmn768m:新生代内存的大小,官方推荐,设置成jvm内存最大值的3/8.
    
    java自带垃圾回收机制,java进行垃圾回收之后不需要重新计算堆区的大小。
    
    堆区:新生代,中生代,老年代。
    
    每生成有一个新的对象,对象占用的内存空间就是新生代空间。
    
    垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收,就会变成中生代,
    
    中生代的就会转移到老年代。
    
    整个jvm堆的大小:新生代+中生代+老生代+永久代(系统自带的)
    
    -XX:ParallelGCThreads=2配置并行收集器的线程数,同时有多少个线程数一起进行来及时回收,配置成cpu的一半。
    
    -XX:PermSize=1024m设置非堆内存的初始值,持久代内存的大小,默认是物理内存的1/4,建议设置成整个jvm内存的一半,非堆内存是不会被Java的垃圾回收机制处理的。
    
    -XX:MaxPermSize=1024m 非堆内存的最大值,和初始值一致即可。
    
    -Djava.awt.headless=true:防止在linux访问的情况下,web页面的图片不能打开。
    
    -XX:+DisableExplicitGC:老年代的收集算法,缩短垃圾回收机制的回收时间。
    
    • PS Eden Space 堆内存 创建一个新对象都在堆内存当中。
    • PS Old Gen 堆内存,长期存活的对象,永生代。
    • PS Survivor space 堆内存,PS Eden space和Ps Old Gen之间的存活对象,中生代。
    • Code Cache 非堆内存,存储以及编译的代码。
    • Compressed Class Space 非对内存,存储以及压缩过的类定义。
    • Metaspace 非堆内存,存储元数据的区域
    • ajp-nio-8009
    • ajp-nio:连接器的类型,ajp是协议,nio:异步非阻塞的通信方式。
    • ajp协议:tomcat服务器和web服务器之间进行连接的协议,可以提供负载均衡和高效转发。nio可以提高并发的处理能力。
    • 8009就是ajp的端口

    8、tomcat和nginx实现动静分离:

    访问nginx就是静态页面,nginx代理实现index.jsp,可以访问tomcat的动态页面。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    课后实验

    在这里插入图片描述

    思路

    nginx1:192.168.168.10纯代理
    
    nginx2、3:
    
    192.168.168.20代理+静态页面
    
    192.168.168.30代理+静态页面
    
    tomcat:
    
    192.168.168.40动态页面
    
    192.168.168.90动态页面
    

    nginx1、2、3,tomcat4、5配置:关闭防火墙,安全机制

    nginx1配置

    vim /usr/local/nginx/conf/nginx.conf

    #keepalive_timeout  0;
        keepalive_timeout  65;
    
    #gzip  on;
    upstream nginx {
        server 192.168.168.20 weight=2;
        server 192.168.168.30 weight=1;
        }
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location ~  .*\.(html|jsp)$ {
        proxy_pass http://nginx;
    
        }
    

    nginx2配置

    vim /usr/local/nginx/html/index.html

    this is test2

    vim /usr/local/nginx/conf/nginx.conf

     #keepalive_timeout  0;
        keepalive_timeout  65;
    
    #gzip  on;
    upstream tomcat {
        server 192.168.168.40:8080 weight=2;
        server 192.168.168.90:8080 weight=1;
        }
    
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
        location ~  .*\.jsp$ {
        proxy_pass http://tomcat;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    

    nginx3配置

    vim /usr/local/nginx/html/index.html

    this is test3

    vim /usr/local/nginx/conf/nginx.conf

     #keepalive_timeout  0;
        keepalive_timeout  65;
    
    #gzip  on;
    upstream tomcat {
        server 192.168.168.40:8080 weight=2;
        server 192.168.168.90:8080 weight=1;
        }
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
        location ~  .*\.jsp$ {
    
        proxy_pass http://tomcat;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    

    tomcat4:

    配置文件设置动态网页打开页面位置

    vim /usr/local/tomcat/conf/server.xml

    
            
    

    动态页面内容设置

    mkdir -p /usr/local/tomcat/webapps/test4

    vim /usr/local/tomcat/webapps/test5/index.jsp

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

    tomcat5:

    配置文件设置动态网页打开页面位置

    vim /usr/local/tomcat/conf/server.xml

     
            
    

    动态页面内容设置

    mkdir -p /usr/local/tomcat/webapps/test5

    vim /usr/local/tomcat/webapps/test5/index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    
    
    JSP test2 page
    
    
    
    <% out.println("动态页面 2,http://www.test2.com");%>
    
    
    
  • 相关阅读:
    【数据结构】顺序表详解
    KVM报错:Unable to connect to libvirt qemu:///system. 确定 ‘libvirtd’ 守护进程正在运行。
    【力扣练习】找一个字符串中不含有重复字符的最长字串的长度
    React - ref 命令为什么代替父子组件的数据传递
    几行Python代码实现人像动漫化, 让头像独一无二
    计算机网络复习(一~三)
    图像处理灰度变换
    Vite项目配置resolve.alias后提示『找不到模块』的解决办法
    node.js学习之路由、中间件
    【uniapp】富文本
  • 原文地址:https://blog.csdn.net/m0_74149099/article/details/140275226