tomcat 虚拟主机
java环境搭建
1.源码包安装java
jdk官网:http://jdk.java.net
1.在官网下载jdk或者java,这里选择jdk8版本,选择接受协议才可以进行下载
2.将下载的jdk源码包进行解压,我这里选择放在/usr/local/目录下,并且改名为java
[root@192 ~]# tar -zxf jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@192 ~]# ls
anaconda-ks.cfg apache-tomcat-8.5.37.tar.gz jdk1.8.0_202 jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@192 ~]# mv jdk1.8.0_202 /usr/local/java
在配置文件后面添加以下几行
[root@192 ~]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSHOME=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
export PATH CLASSHOME JAVA_HOME
使配置文件生效
[root@192 ~]# source /etc/profile
检查配置文件是否生效
[root@192 ~]# java -version
java version "1.8.0_202-ea"
Java(TM) SE runtime environment (build 1.8.0_202-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b03, mixed mode)
tomcat安装
1.源码包安装tomcat
tomcat官网:http://tomcat.apache.org
[root@192 ~]# wget https://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
[root@192 ~]# tar -zxf apache-tomcat-8.5.37.tar.gz
[root@192 ~]# ls
anaconda-ks.cfg apache-tomcat-8.5.37 apache-tomcat-8.5.37.tar.gz jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@192 ~]# mv apache-tomcat-8.5.37 /usr/local/tomcat^C
[root@192 ~]# /usr/local/tomcat/bin/startup.sh
[root@192 ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 10145/java
tcp6 0 0 :::8009 :::* LISTEN 10145/java
tcp6 0 0 :::22 :::* LISTEN 768/sshd
2.浏览器输入http://localhost:8080
tomcat配置虚拟机两种方式
一.基于不同的主机名搭建虚拟机
1.修改tomcat的配置文件
[root@192 conf]# vi server.xml
<Host name="localhost" APPBase="webapps"
unpackWARs="true" autoDeploy="true">
................................................................
</Host>
添加一下几行
<Host name="www.jump.com" appBase="/jump" unpackWARs="true" autoDeploy="true">
<context path="" docBase='.' debug="0" />
</Host>
2.创建访问目录
[root@192 ~]# mkdir /jump
[root@192 ~]# echo 'www.jump.com' > /jump/index.html
[root@192 ~]# mkdir /usr/local/tom/webapps/test
[root@192 ~]# echo 'www.jump8080.com' > /usr/local/tom/webapps/test/index.html
3.在/etc/hosts文件添加主机名
[root@192 ~]# more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.126.132 www.jump.com
4.启动tomcat进行测试
[root@192 ~]# /usr/local/tomcat/bin/startup.sh
[root@192 ~]# curl http://localhost:8080/test/
www.tomcat8080.com
[root@192 ~]# curl http://www.jump.com:8080
www.jump.com
二.基于不同的端口搭建虚拟机
1.修改配置文件
[root@192 conf]# vi server.xml
<Service name="Catalina">
..............................................................
</Service>
在下面添加如下几行
<Service>
<Connector executor="tomcatThreadPool"
port="8089" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="second" debug="0">
<Host name="www.jump.com" appBase="/jump"
unpackWARs="true" autoDeploy="true">
<Context path='' docBase="." debug="0"/>
</Host>
</Engine>
</Service>
2.创建访问目录
[root@192 ~]# mkdir /jump
[root@192 ~]# echo 'www.jump.com' > /jump/index.html
[root@192 ~]# mkdir /usr/local/tom/webapps/test
[root@192 ~]# echo 'www.jump8080.com' > /usr/local/tom/webapps/test/index.html
3.启动tomcat进行测试
[root@192 conf]# /usr/local/tomcat/bin/startup.sh
检查8080和8089端口是否启动
[root@192 conf]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 17364/java
tcp6 0 0 :::8009 :::* LISTEN 17364/java
tcp6 0 0 :::8080 :::* LISTEN 17364/java
tcp6 0 0 :::22 :::* LISTEN 768/sshd
tcp6 0 0 :::8089 :::* LISTEN 17364/java
[root@192 ~]# curl http://localhost:8080/test/
www.tomcat8080.com
[root@192 ~]# curl http://localhost:8089
www.jump.com
tomcat的server.xml文件配置
工作原理
serviceconnector组件根据浏览器的请求的协议和端口号来收集相关请求,
server.xml文件的组件
- <Server>元素
该组件定义一个tomcat实例,默认监听在8005端口以接受shutdown命令,使用telnet命令连接到该端口使用shutdown命令关闭tomcat实例。基于安全是不允许远程连接的。如果需要运行多个tomcat实例,将它监听在多个不同的端口即可。
- address:监听端口绑定的地址。默认为localhost,既只能在localhost服务器上telnet发送shutdown命令关闭tomcat实例
- port: 接受telnet发送shutdown指令的端口,默认为8005,设为-1可以禁掉该端口;
- shutdown:通过tcp/ip协议连接发往serevr用于实现关闭tomcat实例的命令;
2.<Service>元素
该组建是将connector和engine组件绑定起来进行提供服务
- name: service的显示名称,主要用于在日志里面进行标识service.默认为catalina.
3.connector
连接器组件主要用于接受客户端发送的请求并返回响应给客户端。
考虑到tomcat的工作方式:一种tomcat作为应用程序服务器接受来自前端的web服务器请求;另外一种就是既做为web服务器也作为应用程序服务器接受来自浏览器的请求。第二种基于http/1.1和http/2协议的连接器;第一种是基于AJP协议的连接器,AJP协议便负责Tomcat和Apache的连接;
- address:连接器监听地址,默认监听所有地址,既0.0.0.0
- maxThreads:支持最大并发连接数,默认为200
- acceptCount:设置等待队列的最大长度,通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
- maxconnections:允许建立的最大连接数。
- port:监听端口,默认为0
- protocol:连接器使用的协议,用于处理对应的请求
- redirectport:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口。
- connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
- keepAliveTimeout:长连接状态的超时时间。超出该值时,长连接将关闭。
- enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true,应设置为false防止反解客户端主机;
4.<Engine>容器
用来分析协议的引擎机器,他从一个或者多个connector上接受请求,将请求交给虚拟主机进行处理,最后返回完整的数据给connector交给客户端。
service里面只允许有一个engine,而且engine必须设置在connector元素后面,否则无法关联其后面的connector进行请求处理。
- defaultHost:指定处理请求的默认虚拟主机。在Engine中定义的多个虚拟主机的主机名称中至少有一个跟defaultHost定义的主机名称同名。
- name:Engine组件的名称,用于记录日志和错误信息。
5.<Host>容器
host容器用来定义虚拟主机。engine从connector接收到请求进行分析后,会将相关的属性参数传递给对应的(筛选方式是从请求首部的host字段和虚拟主机名称进行匹配)虚拟host进行处理。如果没有合适的虚拟主机,则传递给默认虚拟主机。
- name:虚拟主机的主机名。
- appBase:此Host的webapps目录,即webapp部署在此虚拟主机上时的存放目录。
- unpackWARs的值为true通过解压后的文件结构运行该Web应用。
- autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。
- startStopThreads:启动context容器时的并行线程数。
- xmlBase:部署在此虚拟主机上的context xml目录。
- <Alias>主机别名</Alias>:有时候还需要管理多个站点名称,即主机别名。可以使用Alias为Host指定的主机名定义主机别名。
6.<context>容器
一个context代表一个webapp。catalina基于对请求URI与context中定义的path进行最大匹配前缀的规则进行挑选,从中选出使用哪个context来处理该HTTP请求。每个context都必须在虚拟主机容器host中有一个唯一的context name。必须要有一个context的path为0长度的字符串(即),该context是该虚拟主机的默认webapp,用于处理所有无法被虚拟主机中所有context path匹配的请求。
- cookies:默认为true,表示启用cookie来标识session。
- docBase:即DocumentRoot,是该webapp的context root,即归档WAR文件所在目录或非归档内容所在目录。
- path:定义webapp path。
- reloadable:是否监控/WEB-INF/class和/WEB-INF/lib两个目录中文件的变化,变化时将自动重载。
- xmlNamespaceAware:和web.xml的解析方式有关。默认为true,设置为false可以提升性能。
- xmlNamespaceAware:和web.xml的解析方式有关。默认为true,设置为false可以提升性能。
7.<realm>
realm定义的是一个安全上下文,访问时基于那种认证方式访问;可以认为是一个存放用户名,密码及角色的一个“数据库”。
- .lockoutRealm:多次登录失败后,锁定用户。
- JAASRealm:基于Java Authintication and authorization Service实现用户认证。
- JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;
- JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;
- MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;
- UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;
8.<Value>元素
类似于过滤器,一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。
- AccessLogValve:访问日志Valve;
- ExtendedAccessValve:扩展功能的访问日志Valve;
- RequestDumperValve:请求转储Valve;
- RemoteAddrValve:基于远程地址的访问控制;
- RemoteHostValve:基于远程主机名称的访问控制;
- SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量;
9.Listener
Listener 为侦听器,通常实现tomcat内部进行通信的,可在各组件之间完成通信
10.<GlobalNamingresources>
全局命名资源,方便全局引用,为其命名方便调用。
server.xml配置文件内容
#告诉浏览器文件是按照1.0版本的xml规则解析,采用utf-8的编码格式
<?xml version="1.0" encoding="UTF-8"?>
#server整个配置文件的根元素,shutdown属性表示关闭Server的指令,port属性表示Server接收shutdown指令的端口号,;
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.security.SecurityListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
#service是连接connector和engine组件的,name属性定义service的名字
<Service name="Catalina">
#protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort如果发送的是https请求将请求重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
#客户端可以通过8009端口号使用AJP协议访问Tomcat,
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
#Engine是Service组件中的请求处理组件,name属性用于日志和错误信息,在整个Server中应该唯一。defaultHost属性指定了默认的host名称。
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
#Host组件代表Engine中的一个虚拟主机
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
#定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
#prefix和suffix表示日志文件的前缀名称和后缀名称。pattern表示记录日志时的信息和格式。
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
tomcat+nginx实现动静分离
名称 | 服务器 |
---|---|
tomcat | 192.168.50.144 |
nginx | 192.168.50.145 |
1.配置tomcat的测试动态页面
为了删除干扰,将webapps/ROOT/目录下文件全部删除
[root@tomcat ~]# ls /usr/local/tomcat/webapps/ROOT/
index.jsp QQ.png
[root@tomcat ROOT]# more /usr/local/tomcat/webapps/ROOT/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.simpledateformat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/
html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>tomcat</title>
</head>
<body>
<h1>192.168.50.144 tomcat</h1>
<img src="QQ.png">
</body>
</html>
2.配置nginx的静态测试页面
[root@nginx ~]# more /usr/local/nginx/html/index.html
<h1>192.168.50.145 nginx</h1>
[root@nginx ~]# ls /usr/local/nginx/html/
50x.html index.html
3.nginx修改配置文件进行动静分离
upstream tomcat_server {
server 192.168.50.144:8080;
}
upstream nginx_server {
server 192.168.50.145;
}
#静态请求转发
location ~.*\.(gif|jpg|jpeg|png|bmp|css)$ {
expires 1d;
}
#动态请求
location ~.*.jsp$ {
proxy_pass http://tomcat_server;
proxy_set_header Host $host;
}
4.重新加载nginx,启动tomcat
tomcat测试:
nginx测试:
通过nginx访问动态网页请求:
tomcat 8.x 配置管理员登陆
tomcat的管理员角色权限
- admin-gui — 可访问 “host管理” 页面,但"APP管理" 和 “服务器状态” 页面无查看权限
- manager-gui — 无 “host管理” 页面访问权限,有"APP管理" 和 “服务器状态” 页面查看权限
- manager-status — 只有"服务器状态" 页面查看权限
- manager-script — 有脚本方式管理接口访问权限和"服务器状态" 页面查看权限
- manager-jmx — JMX 代理接口访问权限和"服务器状态" 页面查看权限
- admin-script — 只有host-manager脚本方式管理接口访问权限
1.tomcat9进入管理界面时报错
2.需要修改配置文件$tomcat/conf/tomcat-users.xml ,添加以下内容:
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat" password="s3cret" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
3.tomcat8 安全机制默认下仅允许本机访问tomcat,如果需要远程访问则修改文件的ip访问规则:
配置两个文件主要为了方便管理
[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/manager.xml
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
[root@tomcat1 ~]# more /usr/local/tomcat/conf/Catalina/localhost/host-manager.xml
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/host-manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> #配置允许所有网段都可以进行访问
</Context>
4.重新启动tomcat,再次进行访问tomcat的管理界面:ip地址:8080/manager
点击确定进入组管理界面:
相关阅读
这里我们使用tomcat版本:apache-tomcat-7.0.77-windows-x64.zip 为例:下载链接地址为:https://archive.apache.org/dist/tomcat/tomc
http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.53/bin/
分享一个tomcat7,链接:https://pan.baidu.com/s/1Miwccc2DspBPOgY6rpl81w 密码:t33t 下载完压缩到指定文件夹: 在eclipse中点击菜
关于tomcat启动后http://localhost:8080/打不开页面的
一、tomcat9.0的下载官网:https://tomcat.apache.org/下载后解压到要安装的目录下面。二、配置环境变量右击“我的电脑”——属性
配置Tomcat线程参数maxThreads、acceptCount
一、配置Tomcat/conf/server.xml修改配置<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"redire