# tomcat服务安装脚本
#jdk-7u67-linux-x64.tar.gz apache-tomcat-7.0.73.tar.gz这两个包拷贝进来不需解压(注意对应版本jdk7对应的tomcat7)
tar xzfjdk-7u67-linux-x64.tar.gz
mvjdk1.7.0_67 /usr/local
cat >/etc/profile.d/tomcat.sh <<ok
exportJAVA_HOME=/usr/local/jdk1.7.0_67
# 注意JAVA_HOME的陷阱,变量的引用最好用{},避免有干扰
exportPATH=${JAVA_HOME}/bin:$PATH:/usr/local/tomcat/bin
ok
tar xzfapache-tomcat-7.0.73.tar.gz
mvapache-tomcat-7.0.73 /usr/local/tomcat
useradd -M-s /sbin/nologin tomcat
chown -R tomcat.tomcat/usr/local/tomcat
./etc/profile.d/tomcat.sh
echo "已经将/usr/local/tomcat/bin下面的命令作为了环境变量"
# tomcat配置管理APP
sed -i -r'40a\ <rolerolename="manager-gui"/>\n <role rolename="manager-script"/>\n <role rolename="manager-jmx"/>\n <role rolename="manager-status"/>\n <user username="tomcat"password="123"roles="manager-gui,manager-script,manager-jmx,manager-status"/>'/usr/local/tomcat/conf/tomcat-users.xml
echo "已经配置好管理APP"
echo "可以直接使用startup.sh启动tomcat服务了,shutdown.sh是停止服务"
# $PATH默认是、$PATH默认值、$PATH的默认值是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 配置tomcat虚拟主机脚本
read -p"请输入要做虚拟主机的域名:"yuMing
read -p"请输入要做虚拟主机ROOT上级目录的绝对路径:" rootup
# 不要使用\t,因为有bug,在sed里面看的和在vim里面看的不一样
sed -i -r'/<\/Host>/a\ <Hostname="'${yuMing}'" appBase="'${rootup}'">\n <Context path=""docBase="ROOT" />\n </Host>' /usr/local/tomcat/conf/server.xml
mkdir -p${rootup}/ROOT
echo "已经创建网页的目录${rootup}/ROOT,请去该目录里面写jsp网页."
# tomcat多实例创建脚本
# 注意将/tomcat/conf/server.xml自己添加的虚拟主机注释掉
read -p"请输入您要创的实例名:"instance
read -p"请输入您要创的实例的shutdown的端口:" shutdownPort
read -p"请输入您要创的实例的tomcat的端口:" tomcatPort
cd/usr/local/tomcat
mkdir$instance
chown -Rtomcat.tomcat $instance
cp -r -plogs temp work conf webapps $instance
sed -i -r -e'/"8009"/s#<#<!--#' -e '/"8009"/s#>#-->#'${instance}/conf/server.xml
echo "注释8009端口成功"
sed -i -r -e'/"8005"/s#8005#'${shutdownPort}'#' -e'/"8080"/s#8080#'${tomcatPort}'#' ${instance}/conf/server.xml
# tomcat多实例服务的开启、停止、重启脚本
exportCATALINA_HOME="/usr/local/tomcat"
exportCATALINA_BASE="/usr/local/tomcat/$2"
# 可以直接在后面写参数
# 为什么没用用到CATALINA_BASE变量?因为原始有个脚本是/usr/local/tomcat/catalina.sh,它是有用途的
case"$1" in
start)
${CATALINA_HOME}/bin/startup.sh;;
stop)
${CATALINA_HOME}/bin/shutdown.sh;;
restart)
${CATALINA_HOME}/bin/shutdown.sh
${CATALINA_HOME}/bin/startup.sh;;
esac
关于上周五测试的经验:
一个真实服务器里基于域名的虚拟主机它是靠什么来分的?
1.不是靠虚拟网卡,不需要用虚拟网卡
2.是靠server_name来定义域名的
3.是靠$Host来获取间接主机的域名
哇塞,老师用yum安装的apache
cd/etc/httpd/conf.d
ls
rpm -qlhttpd|grep vhost
cp/usr/share
cp/usr.. .
vim vhost
23行改80端口
24行”/var/www/html”默认的,改为/vhosts/google,还要去主配置文件里面改权限:
主配置文件第127行复制,切换到vhost,23行粘贴,下行写:
“/vhosts”
</Directory>
再进入主配置文件,156行复制,粘贴到vhost的第24行放行权限
28行, www.google.com
29行:/httpd/google_err_log
/google_access_log
复制6行到下方
改4个google为163
mkdir/vhosts/{google,163} -p
chownapache.apache -R /vhosts
echo 163> /vhosts/163/index.html
echo google> /vhosts/google/index.html
systemctlstart httpd
换到客户端,添加/etc/hosts
curlwww.google.com
curlwww.163.com
ok可以
在真实服务器抓包
tcpdump -nv-i ens33 port 80 -w a1.dump
在客户端访问
切换生成报文,查看
Host
再配置代理服务器nginx
注释掉root和index,不然会在本机上面找
proxy_passhttp://真实客户端的ip;
proxy_set_headerHost $Host;
哈哈哈哈,yum安装的apache居然还能做虚拟主机呀
切换到yum安装的apache机:
vim../conf/httpd.conf
197行,因为在vhosts里面看到调用的是那个嘛,%h换成你想要的变量
tomcat:
网页服务:apache、nginx、tomcat(针对jsp网页)
tomcat是一个容器
容器的特点:免费的、占用资源小、跨平台性好、运行的时候不依赖于系统,应用直接丢在tomcat里面就能运行,相当于一个环境
tomcat专门处理html的话不如apache,它擅长于处理jsp网页
/var包放入tomcat web 目录下,自动解包
tomcat 将jsp 转为servlet文件
通常把apache和tomcat整合到一起
start:
jdk-7u67-linux-x64.tar.gzapache-tomcat-7.0.73.tar.gz这两个包拷贝进来
tar xzf jdk-7u67-linux-x64.tar.gz注意对应版本jdk7对应的tomcat7
mvjdk1.7.0_67 /usr/local/jdk1.7
cd /usr/local/jdk1.7
./bin/java-version查看版本
pwd
vim/etc/profile.d/tomcat.sh部署环境变量
exportJAVA_HOME=/usr/local/jdk1.7必须的java安装目录
exportPATH=$JAVA_HOME/bin:$PATH我们要让jdk1.7生效
. /etc/profile.d/tomcat.sh
java-version看java是否部署好了
cd -
ls
tar xzf apache-tomcat-7.0.73.tar.gz
mv apache-tomcat-7.0.73/usr/local/tomcat
cd/usr/local/tomcat
ls
这是一个二进制的包,直接解压出来就能用了
webapps把var包放到webapps里面就能用了
useradd -M-s /sbin/nologin tomcat
chown -R tomcat.tomcat/usr/local/tomcat
/usr/local/tomcat/bin/startup.sh运行tomcat
vim/etc/profile.d/tomcat.sh
PATH后面添加:/usr/local/tomcat/bin/
./etc/profile.d/tomcat.sh
startup.sh
netstat-luantp |grep 8080这个是蓝桥老师教我的tomcat部署的端口8080哈
浏览器输入ip:8080
进入之后猫的右边有Manager App管理应用,点他,点取消,出现401页面,
把用户名和密码按照上面的配出来
配置好了后重启服务才会生效:shutdown.sh;startup.sh
为什么echo $PATH只有tomcat没有jdk?
因为JAVA_HOME的陷阱,变量的引用最好用{},避免有干扰
vim/usr/local/tomcat/conf/tomcat-users.xml用户名是tomcat,密码
18:开始
写在里面,不要写到外面去了
38:有多个role角色可以用逗号隔开,用一个用户管理所有的东西就可以了
35和38复制到role1注释下面
复制为4份,修改rolename
maneger-gui
maneger-script
maneger-jmx
maneger-status
<><userusername=”tomcat” password=”123” roles=”授权的role访问哪些(将rolename复制将来用逗号隔开)”>
41:结束
停止服务
查看8080端口
TIME_WAIT是什么时候产生的?
四次挥手的时候产生TIME_WAIT啊
监听listen的没有了就行了,wait的无所谓
startup.sh启动服务
哈哈哈,在浏览器输入ip:8080哈哈
进入猫网页,右边tomcat服务器状态,点它,输入用户名和密码进去
manager app就可以直接点进去了,因为已经记住密码了
应用解压之后就是一个目录,看状态看有没有运行
war file todeploy发布war文件:浏览-deploy发布
deploy同名的文件,有解包、编译的过程
管理应用,开启停止重载、undeploy
cd /bin
ls
.bat是windows里的批处理文件
只用看.sh就行了
catalina.sh这个脚本是非常重要的
lib是java的库,放jar包的
cd ..
cd conf
ls
vimserver.xml主配置文件
22:server服务端口为8005,shutdown=”SHUTDOWN”>连8005端口再SHUTDOWN也能关闭tomcat服务
41:auth是授权
50多行的路径就是我们为什么之前要改那个目录的原因了
73:连接超时时间20000ms,也就是20s
redirectPort=”8443”做https的端口
8009端口使用的是AJP协议,用来整合apache的
106:defaultHost=”localhost虚拟主机的名称,一定要是定义的(127行定义的)”默认进入到那个虚拟主机
127:appBase=”webapps”应用的发布目录,unpackWARs=”true”自动解包为真,autoDeploy=”true”自动发布为真,放哪儿呢?应用的发布目录
140:日志呀
prefix=“后缀写后面,最后面写个.就可以了”是我们访问的日志,suffix=”.txt”说明后缀是.txt
62行:78行:94行各自端口的最大连接数
配置虚拟主机:
一个host就是一个虚拟主机,增加host就行了,位置要放对,放在前一个host旁
网页是在应用目录下的ROOT目录
cd../webapps
ls
网页就是放在ROOT下面
vimROOT/index.jsp可以看到猫网页的代码
appBase=”应用目录发布的位置”
docBase=”ROOT”在ROOT下面
vim../conf/server.xml
/Host
121:复制
141: 粘贴<Hostname="www.google.com" appBase="/google">
<Context path="" docBase="ROOT" />
</Host>
ok
复制上面粘贴到下面,改google为163
网页写在哪儿?写在appBase对应目录
125:www.up.com
105: defaultHost=www.google.com
shutdown.sh报错144行没有Context结束
修改好之后
startup.sh
mkdir -p/{google,163}/ROOT
vim/google/ROOT/index.jsp
<html>
<head>
<title>google</title> (title 是页面的标签,)
</head>
<body>
<% out.println("google");%>(test1 是页面的内容)
</body>
</html>
vim/google/ROOT/index.jsp
<html>
<head>
<title>163</title> (title 是页面的标签,)
</head>
<body>
<% out.println("163");%>(test1 是页面的内容)
</body>
</html>
客户端:
vim/etc/hosts添加
浏览器输入:
www.google.com:8080
无法访问
查看服务器的8080状态,没有起来
重启一下
www.google.com:8080
www.163.com:8080
www.up.com:8080
3个端口:
8005端口:监听关闭服务的
8080端口:http协议的
8009:ajp服务的
telnet127.0.0.1 8005监听在本机,没有这个命令用yum安装
直接在里面敲SHUTDOWN就可以关闭tomcat服务了
多实例:
多实例运行相同的应用可以实现负载均衡,一个容器支持一个实例进程,多个容器就支持多个实例进程,支持高并发处理
start:
cd tomcat
mkdir instance1
mv logs temp work conf webapps instance1
ls
cp -p instance1 instance2
cp -p instance1 instance3
ls
vim instance1/conf/server.xml
注释虚拟主机,不动,注释8009端口
vim instance2/conf/server.xml
71行8081
注释虚拟主机
vim instance3/conf/server.xml
25行 8005》8006修改shutdown的端口,若不修改一shutdown端口就全都shutdown了
71行 8080 》8081改tomcat的端口,启动后看这个端口起来了没
注释虚拟主机
cd instance1
vim /scripts/tomcatServer.sh
# tomcat多实例服务的开启、停止、重启脚本
export CATALINA_HOME="/usr/local/tomcat"
export CATALINA_BASE="/usr/local/tomcat/$2"
# 可以直接在后面写参数
# 为什么没用用到CATALINA_BASE变量?因为原始有个脚本是/usr/local/tomcat/catalina.sh,它是有用途的
case "$1" in
start)
${CATALINA_HOME}/bin/startup.sh;;
stop)
${CATALINA_HOME}/bin/shutdown.sh;;
restart)
${CATALINA_HOME}/bin/shutdown.sh
${CATALINA_HOME}/bin/startup.sh;;
esac
. /scripts/tomcatServer.sh start instance1启动多实例1的服务
其他两份实例目录里也是一样
netstat -luantp | grep 80
../instance1/instance1.sh start.sh看看是用start还是start,停止是stop,重启是restart
../instance2/instance2.sh start.sh
../instance3/instance3.sh start.sh
netstat -luantp | grep 80
原理:一台服务器中开启多台tomcat
多实例运行不同的应用(类似虚拟主机,使用前要注释掉虚拟主机)
不加机器的情况下提高并发量,一机双实例,实例的数据
多个实例相当于多个tomcat服务
每一个实例写一个脚本太麻烦了,能不能一个脚本控制所有实例?可以啊,直接声名个变量来输入接收要启动关闭那个实例就可以了
tomcat的虚拟主机和多实例总结:
虚拟主机:一个容器里运行多台机器
多实例:一个容器里只运行一台机器,可以有多个容器,性能比虚拟主机好
cd webapps
ls
cp/root/jenkins.war
ls
重启服务restart
ls
自动解包了
访问的时候就可以访问jenkins目录了
浏览器输入www.up.com:8081/jenkins
服务启动脚本
底端
exec$
$PRG
$0
bin/starup.sh
PRGDIR绝对路径
vimbin/catalina.sh
26_HOME
28_BASE
120:PRG $0
139如果BASE为空,BASE=HOME
部位空的话,
思考1:
nginx和tomcat怎么整合起来?
可以做动静分离
静态的交给nginx
动态的交给tomcat
答:访问动态的话存在资源的问题,发现只晓得访问那一个页面,而那个页面旁边的资源都像不认识一样,解决方法:需要将动态的资源拷贝到代理机上(缺点是不能同步更改,而且占资源),使用nfs挂载无效,发现使用匹配~ \.jsp|.png|.jpg|.js$可以神奇的认识动态页面旁边的资源,目前为止设置匹配是最好的办法了
思考2:
nginx使用代理做负载均衡
客户机
nginx代理机
tomcat1 tomcat2多实例
做负载均衡的话可以起一个组upstream tomgroup{server ip:端口;serverip:端口;}
但是做了负载均衡之后,匹配的图片效果就会大减,感觉又不认识动态页面旁边的资源了
这匹配有 bug ,当访问自己 nginx 上静态的网站时 ( 这网站自带图片、 js 等 ), 就会误认为匹配到了 png 或 js 等而转向了 tom 机,导致不认识 nginx 本机上网站里的图片和 js