Nginx/Httpd反代tomcat配置
在上一篇博客中,我们了解了tomcat的server.xml中各组件的用法和作用;其中对于tomcat连接器来说,它分三类,一类是http连接器,一类是https连接器,一类是ajp连接器;通常tomcat作为应用服务器,我们不建议也不应该让tomcat直接面向客户端提供服务;因此进入tomcat的访问就只有其他反代服务器的请求了;如果说tomcat使用其他反代服务器对外提供服务,那么对于https的访问就应该由代理服务器端来实现,从代理服务器到tomcat的访问,我们应该还是使用http或者ajp协议,综上所述常用的连接器也就http和ajp;http是一个文本格式协议,对于浏览器来说是支持的;ajp协议是二进制格式协议,对于浏览器是不支持的;所以对于反代服务器来讲,面向客户端它提供http协议访问,面向服务端它提供ajp协议去访问;这样去反代tomcat,相对要安全一点,至少客户端不能绕过代理直接访问tomcat;
常见的的反代服务器有haproxy、nginx、httpd,这三款软件中haproxy和nginx 可基于http协议来代理tomcat;httpd可基于http协议反代tomcat,也支持ajp协议反代tomcat,如果是ajp协议反代tomcat,在httpd上要启用一个proxy_ajp_module;
1、nginx反代tomcat
nginx基于http协议反代tomcat和反代其他web服务器的配置没有本质的不同,我们定义一个location,然后通过proxy_pass 把对应URL反代到后端tomcat服务器上就好;
示例:nginx反代tomcat中的www.test1.com 和localhost主机
提示:以上配置表示访问路径匹配根,就把请求代理到192.168.0.22:8080上,其实这个请求到tomcat上个以后,它会去找对应host是否有,如果有就从匹配到的host上响应,如果没有就从默认的host上响应,很明显192.168.0.22不能匹配tomcat的host,所以他会从默认host localhost这个虚拟主机响应;相当于把访问/的请求反代给localhost这个虚拟主机上;对于匹配以.jsp或者.do结尾的资源就走第二个location,把请求反代到www.test1.com这台虚拟主机上;
验证:访问192.168.0.22看看是否访问到tomcat的localhost虚拟主机上提供的页面?
提示:可以看到我们访问192.168.0.22时,浏览器返回了tomcat中localhost提供的主页;
验证:访问192..168.0.22/index.jsp 看看是否访问到tomcat上的www.test1.com 所提供的主页?
提示:可以看到访问192.168.0.22/index.jsp时,浏览器中响应了tomcat中www.test1.com这台虚拟主机提供的主页;
2、httpd反代tomcat
示例:httpd基于http协议反代tomcat
提示:以上配置表示访问www.test1.com 把请求反代到http://127.0.0.1:8080上;这里需要注意proxypreservehost off表示不把客户端传来的host首部传到tomcat上去,这意味着我们访问www.test1.com ,是不能够访问到tomcat中www.test1.com这台虚拟主机的,因为客户端访问httpd,host首部是www.test1.com,到了httpd后,httpd封装报文,它不会把客户端host首部原封不动的传给后面tomcat,而是重新封装host首部为127.0.0.1,因为封装后的报文host首部的值为127.0.0.1,到达tomcat后,它匹配不到127.0.0.1的虚拟主机,所以会从默认虚拟主机localhost返回,所以客户端访问www.teste1.com,会响应tomcat中localhost虚拟主机的页面;
验证:用浏览器访问www.test1.com 看看是否响应tomcat 中localhost的页面给我们?
提示:可以看到我们访问www.test1.com ,响应的并不是tomcat中www.test1.com这个虚拟主机提供的页面,而是localhost虚拟主机提供的页面;这其中的原因就是proxypreservehost off;它并没有把客户端的host首部传递到tomcat;
修改proxypreservehost off 为on ,然后重启httpd,再访问www.test1.com 看看是否还是给我们返回localhost虚拟主机的页面呢?
提示:以上修改proxypreservehost on 表示把客户端host首部的值传递到后端tomcat;这样一来tomcat就可以根据客户端传递的host首部来分别响应不同虚拟主机上的页面了;
验证:重启httpd服务,访问www.test1.com 看看是否会把tomcat中www.test1.com 虚拟主机的页面响应给我们?
提示:可以看到现在我们访问www.test1.com 就不再给我们响应localhost虚拟主机的页面了,而是www.test1.com虚拟主机的页面,说明httpd把客户端hosts首部的值传递到后端tomcat上了;
测试:访问192.168.0.22 看看是否访问到默认localhost虚拟主机页面呢?
提示:可以看到我们访问192.168.0.22时,响应给我们的是tomcat中localhost虚拟主机页面;原因是httpd把客户端host首部的值192.168.0.22传递给后端tomcat后,在tomcat上并没有找到192.168.0.22这个虚拟主机,所以在tomcat上就以默认虚拟主机localhost响应给httpd,然后在响应给浏览器;所以我们看到的就是tomcat中localhost虚拟主机的页面;
3、httpd基于ajp协议反代tomcat
以上面的例子,httpd通过http协议反代tomcat和通过ajp协议反代tomcat,从httpd的配置上,没有本质的不同;不外乎就是把http协议修改成ajp协议,把后端tomcat8080端口改成8009端口;其他的都一样;如下所示
提示:这里需要注意一点,httpd使用ajp协议反代tomcat ,需要请用proxy_ajp_module模块,否则httpd是不支持ajp协议的;
验证:分别在浏览器上访问www.test1.com 和192.168.0.22 看看是否能访问到tomcat中对应虚拟主机的页面?
提示:可以看到我们使用基于ajp协议反代tomcat和基于http反代tomcat在访问上没有什么不同;
Nginx/Httpd反代tomcat配置的更多相关文章
- Nginx/Httpd负载均衡tomcat配置
在前一篇博客中我们聊了下用Nginx和httpd对后端tomcat服务做反代相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13334180.html: ...
- nginx多层反代配置变量proxy_set_header
Nginx多层反代配置变量proxy_set_header过程记录 第一层代理: (1)路径: $ vim /data/soft/nginx/conf/vhost/xixi.conf (2)内容:(注 ...
- 使用nginx做反代时遇到413 Request Entity Too Large的解决方法
在使用nginx做反向代理的时候,被反代的系统在上传文件的时候遇到413 错误 :Request Entity Too Large 原因是nginx限制了上传文件的大小,在nginx中可以配置最大允许 ...
- Nginx反代Mogilefs分布式储存示例
一.分布式存储系统简介 随着信息技术不断的发展,给我们带来便利的同时,不断增加的数据量级.信息之间的连接关联越来越复杂.数据访问的并发量日益增加对I/O的要求越来越高.数据类型越来越复杂等难题也成为信 ...
- Nginx反代MogileFS集群
上一篇博文我们主要聊了下分布式文件系统MogileFS的组件以及部署使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13677279.html:今天我们主要 ...
- Nginx反代,后端一个IP绑定多个SSL证书,导致连接失败之解决方法:HTTPS和SNI扩展
默认:SSL协议进行握手协商进行连接的时候,默认是不会发送主机名的,也就是是以IP的形式来进行https连接握手协商的,这就导致一个问题,当一台服务器上有多个虚拟主机使用同一个IP的时候, Nginx ...
- tomcat 反代配置
tomcat反代可以基于nginx , http进行反代 反代服务器: 有两个网口 反代服务器一般有两块网卡一块处于外网,一块处于内网用于与后端服务器通信 tomcat 节点处于内网地址 1 tom ...
- Nginx反代服务器进阶学习最佳配置实践指南
转载自:https://www.bilibili.com/read/cv16150010?spm_id_from=333.999.0.0 0x00 编译实践 描述:在企业线上生产环境中推荐进行Ngin ...
- Nginx反代服务器基础配置实践案例
转载自:https://www.bilibili.com/read/cv16149433?spm_id_from=333.999.0.0 方式1: 轮询 RR(默认轮询)每个请求按时间顺序逐一分配到不 ...
随机推荐
- CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设
本文首先会和大家分享当前整个应用生命周期的演变历程,然后讲解云计算模式下 DevOps 建设包含的过程.流程规范和标准,最后讲解云原生时代到来会带来哪些改变,以及标准化的建设会有哪些改变和突破. 应用 ...
- 人声提取工具Spleeter安装教程(linux)
在安装之前,要确保运行Spleeter的计算机系统是64位,Spleeter不支持32位的系统.如何查看? 因为在linux环境下安装spleeter相对要简单很多,这篇教程先以Ubuntu20.04 ...
- GridView绑定数据与隐藏指定控件(模板列)
1.1. GridView绑定数据 1) 可以配置SqlDataSource数据源,修改select语句生成框架(不想手动绑定) 2) 删除DataSourceID属性和 ...
- Beta冲刺--冲刺总结
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 Beta冲刺--冲刺总结 作业正文 如下 其他参考文献 ... Beta冲刺 ...
- 旷世提出类别正则化的域自适应目标检测模型,缓解场景多样的痛点 | CVPR 2020
论文基于DA Faster R-CNN系列提出类别正则化框架,充分利用多标签分类的弱定位能力以及图片级预测和实例级预测的类一致性,从实验结果来看,类该方法能够很好地提升DA Faster R-CNN系 ...
- ImageLoader在Listview中的使用
图片加载框架之ImageLoader 1_特点 1)多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2)支持随意的配置ImageLoader,例如线程池 ...
- 一不小心,我就上传了 279674 字的 MySQL 学习资料到 github 上了
自从2019年11月我们出版了<千金良方--MySQL 性能优化金字塔法则>一书之后,持续不断有人来询问我MySQL 4 个系统字典库相关的问题,因为篇幅原因,书中并没有完整收录4个字典库 ...
- hive中如何查询除了其中某个字段剩余所有字段
想要将hive分区表中的某个分区复制到新的分区中,使用如下sql语句 insert overwrite table zcfw_sda.sda04_core_request_base_ratio_ifr ...
- 05 . k8s实战之部署PHP/JAVA网站
传统部署和k8s部署区别 通常使用传统的部署的时候,我们一个web项目,网站的搭建,往往使用的如下的一种整体架构,可能有的公司在某一环节使用的东西是不一样,但是大体的框架流程是都是差不多的 1111 ...
- 什么是JSTL标签库?
什么是JSTL? JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的. 有什么作用? ...