开发者学堂课程【Tomcat 服务器入门详解:代理和 Session 机制】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/654/detail/10847
四、httpd 和 Tomcat 实践
# yum install httpd -y
# httpd -M
# httpd -M | grep proxy
proxy_module (shared)
proxy_ajp_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
主要是 HTTPD 和 Tomcat 的结合,httpd 刚才已经安装过了,这个实际上我们来看:
主要是有几个模块,代理要写这模块, nginx 深受它的影响,nginx 也有很多模块,尤其像淘宝改版的东西,还可以动态模块加载,这样就方便不下线,就可以把这些模块动态的进行加载,能够比较好的支持线上的业务。
下面已经被停止过了,先来看一下 httpd,这块与代理相关的,全是 proxy 开头的。
一会要去试 AJP 的连接,还有就是 balancer 做负载均衡。基础用 proxy,这些模块的默认全部都有。
再看 balancer,当中它的几个叫做 load balancer,load balance 的 method。
这个方法没问题,by requests 是它默认的,意思就是按请求轮巡。traffic 就跟交通有关,就看交通的压力了,访问了多少问题,还有一些都是跟 busyness,和业务相关,就是与服务器的压力有关了。
如果服务器在用的过程中会发现有些机器不堪重负,因为是几年前的机械,不堪重负,或者买一个云的时候,给资源分少了,不够,跑不动。所以这个时候就得按照负荷来,已经不堪重负,虽然压力比较小,即给的请求虽然比较少,但是已经不堪重负了,就是看流量。
虽然是发了一个请求,但是传好多的数据,而那边发的请求虽然多,但是每一次发的数据量都比较小,流量比较小,所以负荷也比较小。还有多语种以前没有。这些模块就是要用的东西,要在这上面去做一些调整。
1、httpd 配置
(1)proxy_http_moduie 模块代理配置
ProxyRequests
O
ff
ProxyVia
on
ProxyPreserveHost on
ProxyPass
/ http://127.8.0.1:8080/
ProxyPassReverse / http:/ /127.0.0.1:8080/
ProxyRequests: Off 关闭正向代理。
ProxyPass: 反向代理指令。
ProxyPassReverse: 保留代理的 response 头不重写(个别除外)。
ProxyPreserveHost: On 开启。让代理保留原请求的 Host 首部。
ProxyVia: On 开启。代理的请求响应时提供一个 response 的 via 首部。
在虚拟主机中,星代表不管来的是什么,只要访问这台机器的80端口,都可以通过,当然也可以写域名匹配或者IP的匹配。其实到了80,不管什么都往后扔,通过代理往后,ProxyRequests 要关掉,是正向代理。
主要是下面这一项 Proxypass /http://127.0.0.1:8080/,代理都向后台去,但是写域名不靠这个,要靠 ProxyPreserveHost On,也就是发来的请求头里面的,请求头部的有一个字段叫 host 字段,里面是有域名的。On 往后带,如果不往后就有问题了。
IP 来了,host 没有的话就没法匹配,没法匹配就能看到管理界面,如果带上,到时候用域名访问把它带上了,就能看到自己写应用,进行测试。
ProxyVia on 就是在代理这一级的响应头,响应的时候会带 via,可以开也可以关,不留其实也可以,对方能够通过一些信息,是能够判断出你的部署的,甚至能知道用的是什么样的服务,甚至知道用什么版本,然后进行攻击,所以要让他知道的越少越好。
ProxyPassReverse 这一项,保留 response 头部,不重写,但个别的还是要写下来。
(2)配置
Vim/etc/httpd/conf.d/httptomcat.conf
一起分享的有没有 HD,有的话我们看看抗压性配置文件,分散流上去,在这下面随便加一个,然后把这个东西粘过来,这样就有配置文件了,配置文件有了以后,然后就看到时候会不会加载,在这最好做一下这样测试,语法是通过的才可以,就是做内容的没给对,这是一个警告。
接下来就可以直接启动一下。Systemct1 start httpd 别到端口冲突就行,看看办案端口 httpd 起来了,这就行了,来试一下刚才在配置中直接复制,实际上是打开了域名往后带的这个东西,后续的字段网络带的东西,分别可以使用这个东西来试一下,这是用IP的,然后去掉了。
下面整个域名来看这两个,为什么看两个呢,因为主目录没去掉,那么就直接访问这个就行了。主目录 document root 没被弄掉,把这个改掉就行了,或者直接禁就行了。
直接访问 index.jsp 是不是跑到后面 index,hb 不能解释 JSP了,Jsp 是后面自己写的应用。如果用这个来访问的话,这就是管理页面了,也就是说这个是可以的。把配置这一项,从这个 on 给它改成 off。不管是域名访问,还是用IP访问,现在最新的应用是看不见了,但是必须得把它回头就行了。
首先最好还是先刚提一下,应该先刚提一下。强制的我们回到刚才那一页,强制的给它刷一下,因为有的时候它会有本次的第一个保存。现在看不到了,跑到 local 后市场去了,没有跑到自己配置开的虚拟主机上去,这说明已经配成功了。
2、Proxy_ajp_module 模块代理配置
(1)http 访问
下面了解一下 XP,然后可以看一下这里面这个状态,访问的都是通过 HTTP 来进行访问的,ajp 到现在是没访问。那么下面就是在来改变这个状况。怎么改是把刚才要改一下。
实际上是通过 SB 的方式要对它进行一个修改,这块刚才已经测试过了,这块的协议给它改掉就行了。
前面协议到 APP,后面端口要改到8009上去,要把这个要改一下就行了。
就在原来这个基础上进行修改, off 也可以,主要是看用 agb 连接成功了没有。当然下面这一项可以不要了,在这个 AJP 上面可以不要,没有问题。语法是正确的, Systemct1 reload http,重启了。再来看一下 CTRL F,现在连接已经变成 HP 了。
(2)二进制协议
二进制协议有自己格式,在官网上面是有这一块的内容,格式是比较多的,在官网上有这块内容可以去了解一下,没兴趣就知道想的稍微高一点就行了,到里面去主要是通过这个东西来区分一下就行了。
这块的测试都比较简单,那么到底是用 ajp 还是 ajp,工作中用的最多可能还是nginx 这个,这个时候就不用 ajp。
(3)优化代码
真正在写代码的过程中,会考虑如何将压力少压在 Tomcat 的服务上,这个从写代码的过程中就得考虑,之后再优化,架不住把所有压力都给 Tomcat 的,部署优化没有用,写代码的时候应该是这样的原则,能够少去请求后端的服务,就应该少做这事儿。该要的数据要,不该要的数据就不能拿。
有些不注意,一条语句过去了,有时候在代码上要做一些优化,就是内存要合理的运用,带宽要合理的运用,这才能写出好的程序,这样部署就可以了,不然的话你这边部署想再好的都没用了,比如说可以把动态的进行缓存,缓存的前提是应该在一段时间内它的使用比较频繁,且获取代价较高。
在这段时间内,只要在这段时间内它不变,且获取代价比较高,而且还是比较频繁的使用,才有必要缓存,如果在一段时间内一直都变,比如获取随机数,就没有必要缓存,所以这几个条件都得加到一起才行,说不但这个数据有价值,而且有一段时间不变,这已经开始可以了,再一个还得高频时间。
总之还是架构不要想一天就可以把它搭好,这个公司写了个项目很小,别用这种东西了。别人的东西怎么简单,其实维护的代价也低,当真的是像前面说微服务的,服务多,问题都有可能,服务治理就是个大问题,所以有什么样的水平,然后做什么样的事,这是最合适的。