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(默认轮询)每个请求按时间顺序逐一分配到不 ...
随机推荐
- c++运算符重及其调用
本文参考自:https://blog.csdn.net/lisemi/article/details/93618161 运算符重载就是赋予运算符新功能,其本质是一个函数. 运算符重载时要遵循以下规则: ...
- SSM登录拦截验证
/** * 登陆拦截器,用于后台管理系统拦截,判断用户是否登录 * @author ljy * @date 2015/8/19 */public class LoginForAdminIntercep ...
- Python之浅谈绑定方法
目录 绑定方法和非绑定方法 绑定方法 对象的绑定方法 类的绑定方法 非绑定方法 总结 绑定方法和非绑定方法 类中定义的方法大致可以分为两类:绑定方法和非绑定方法.其中绑定方法又可以分为绑定到对象的方法 ...
- oracle 环境变量配置 字符集编码配置
字符编码的环境变量配置: http://jingyan.baidu.com/article/e73e26c0c20f1a24adb6a73e.html (1).数据库服务器字符集select * fr ...
- typescript 展开操作符,对象属性值更新
- C++ 自动资源释放的单例模式
代码思想就是程序结束时会自动释放静态/全局资源时删除单例资源. //.h class CSingleton { public: static CSingleton* Singleton() { ret ...
- python中的多任务--线程
什么是多任务? 简单地说,就是操作系统可以同时运行多个任务. 实现多任务有多种方式,线程.进程.协程. 多任务的概念:并行和并发 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法, 实 ...
- Mysql百万级数据查询优化
1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题 ...
- 前端性能优化_css加载会造成哪些阻塞现象?
css的加载是不会阻塞DOM的解析,但是会阻塞DOM的渲染,会阻塞link后面js语句的执行.这是由于浏览器为了防止html页面的重复渲染而降低性能,所以浏览器只会在加载的时候去解析dom树,然后等在 ...
- day11总结
"""1.什么是函数 具备某一功能的工具===>函数 事先准备工具的过程===>函数的定义 遇到应用场景拿来就用=>函数的调用 2.为何要有函数 内置函 ...