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(默认轮询)每个请求按时间顺序逐一分配到不 ...
随机推荐
- arduino连接1602LCD方法
arduino连接1602LCD方法 参考代码:
- excel如何快速汇总多个类别的总和?
这个需求是一位在当前抗疫一线的朋友提出的,和各位分享一下. 需求情况 因为众所周知的原因,他每天都需要为照顾的小区居民购买.运送生活物资.小区居民通过表单的形式提交自己每日的需求,最终汇总到一张exc ...
- Python 网络爬虫实战:爬取 B站《全职高手》20万条评论数据
本周我们的目标是:B站(哔哩哔哩弹幕网 https://www.bilibili.com )视频评论数据. 我们都知道,B站有很多号称“镇站之宝”的视频,拥有着数量极其恐怖的评论和弹幕.所以这次我们的 ...
- C++ vector迭代器访问二维数组
#include<iostream> #include<vector> int main(){ std::vector<int> arr(); // 创建一维数组 ...
- JS中函数执行顺序的问题?
作者:知乎用户链接:https://www.zhihu.com/question/23564807/answer/82996422来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 手机商品分享样式(纯html+css)
效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- Perl入门(四)Perl的正则表达式
正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...
- Vue中$nextTick的理解
Vue中$nextTick的理解 Vue中$nextTick方法将回调延迟到下次DOM更新循环之后执行,也就是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,能够获取更新后的 ...
- css如何设置首行文字缩进?
在HTML网页中通常一段文字都需要设置首行缩进两个文字,使页面更加美观,我们可以通过css实现这一效果,下面我们就来看一下使用css设置首行文字缩进的方法. css可以使用text-indent属性来 ...
- yum仓库管理 yum-config-manager
yum仓库管理 yum-config-manager 简介 # yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题. # yum 可以同时配置 ...