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(默认轮询)每个请求按时间顺序逐一分配到不 ...
随机推荐
- CRC16冗余循环检测计算器-好用。modbus RTU
开始使用 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modbus,%2 ...
- C# 什么是泛型 ?以及对泛型各方面的一些知识点的整理
1.1 理解什么是泛型 在.NET 2.0,可以成为革命性壮举的, 就是引入了激动人心的特性——泛型..NET泛型是CLR和高级语言共同支持的一种全新的结构,实现了一种将类型抽象化的通用处理方式.在泛 ...
- Java并发编程-深入探讨synchronized实现原理
synchronized这个关键字对应Java程序猿来说是非常的熟悉,只要遇到要解决线程安全问题的地方都会使用这个关键字.接下来一起来探讨一下synchronized到底时怎么实现线程同步,使用syn ...
- 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析
原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...
- SpringBoot -- 项目结构+启动流程
一.简述: 项目结构 二.简述:启动流程 说springboot的启动流程,当然少不了springboot启动入口类 @SpringBootApplication public class Sprin ...
- skywalking与pinpoint全链路追踪方案对比
由于公司目前有200多微服务,微服务之间的调用关系错综复杂,调用关系人工维护基本不可能实现,需要调研一套全链路追踪方案,初步调研之后选取了skywalking和pinpoint进行对比; 选取skyw ...
- docker 安装mysql:latest 问题
背景 周末闲着没事,然后想着在虚拟机用docker装个mysql吧.然后就开始安装了. 正文 打开dockerhub.com,在输入框输入mysql,选择mysql第一个,进入后找到How to us ...
- STM32内存受限情况下摄像头驱动方式与图像裁剪的选择
1.STM32图像接收接口 使用stm32芯片,128kB RAM,512kB Rom,资源有限,接摄像头采集图像,这种情况下,内存利用制约程序设计. STM32使用DCMI接口读取摄像头,协议如下. ...
- vueX基础知识点笔记
vuex是专门用来管理vue.js应用程序中状态的一个插件.他的作用是将应用中的所有状态都放在一起, 集中式来管理.需要声明的是,这里所说的状态指的是vue组件中data里面的属性.简单的来说, 它就 ...
- "该公众号暂时无法提供服务,请稍后再试"的问题
倒腾了好久,对微信公众号也不是很熟悉.不知道怎么看问题,php学的也不久. 1.定位问题. 网上找了很久,最后找到两种定位问题的方式. a.https://blog.csdn.net/qq_28506 ...