在上一篇博客中,我们了解了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配置的更多相关文章

  1. Nginx/Httpd负载均衡tomcat配置

    在前一篇博客中我们聊了下用Nginx和httpd对后端tomcat服务做反代相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13334180.html: ...

  2. nginx多层反代配置变量proxy_set_header

    Nginx多层反代配置变量proxy_set_header过程记录 第一层代理: (1)路径: $ vim /data/soft/nginx/conf/vhost/xixi.conf (2)内容:(注 ...

  3. 使用nginx做反代时遇到413 Request Entity Too Large的解决方法

    在使用nginx做反向代理的时候,被反代的系统在上传文件的时候遇到413 错误 :Request Entity Too Large 原因是nginx限制了上传文件的大小,在nginx中可以配置最大允许 ...

  4. Nginx反代Mogilefs分布式储存示例

    一.分布式存储系统简介 随着信息技术不断的发展,给我们带来便利的同时,不断增加的数据量级.信息之间的连接关联越来越复杂.数据访问的并发量日益增加对I/O的要求越来越高.数据类型越来越复杂等难题也成为信 ...

  5. Nginx反代MogileFS集群

    上一篇博文我们主要聊了下分布式文件系统MogileFS的组件以及部署使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13677279.html:今天我们主要 ...

  6. Nginx反代,后端一个IP绑定多个SSL证书,导致连接失败之解决方法:HTTPS和SNI扩展

    默认:SSL协议进行握手协商进行连接的时候,默认是不会发送主机名的,也就是是以IP的形式来进行https连接握手协商的,这就导致一个问题,当一台服务器上有多个虚拟主机使用同一个IP的时候, Nginx ...

  7. tomcat 反代配置

    tomcat反代可以基于nginx , http进行反代 反代服务器: 有两个网口  反代服务器一般有两块网卡一块处于外网,一块处于内网用于与后端服务器通信 tomcat 节点处于内网地址 1 tom ...

  8. Nginx反代服务器进阶学习最佳配置实践指南

    转载自:https://www.bilibili.com/read/cv16150010?spm_id_from=333.999.0.0 0x00 编译实践 描述:在企业线上生产环境中推荐进行Ngin ...

  9. Nginx反代服务器基础配置实践案例

    转载自:https://www.bilibili.com/read/cv16149433?spm_id_from=333.999.0.0 方式1: 轮询 RR(默认轮询)每个请求按时间顺序逐一分配到不 ...

随机推荐

  1. C# WPF - MVVM实现OPC Client管理系统

    前言 本文主要讲解采用WPF MVVM模式设计OPC Client的过程,算作对于WPF MVVM架构的学习记录吧!不足之处请不吝赐教,感谢! 涉及知识点 C#基础 Xaml基础 命令.通知和数据绑定 ...

  2. Centos中使用virtualenvwrapper

    Centos中使用virtualenvwrapper python特有的一种软件环境,创建多个python环境,各个环境之间完全隔离,互不影响.它可以用来解决Python项目开发和运行过程中的依赖项和 ...

  3. opencv C++构造并访问单通道和多通道Mat。

    一:构造并访问单通道. int main(){ cv::Mat m=(cv::Mat_<int>(3,2)<<1,2,3,4,5,6); for(int i=0;i<m. ...

  4. Java并发编程-Java内存模型

    JVM内存结构与Java内存模型经常会混淆在一起,本文将对Java内存模型进行详细说明,并解释Java内存模型在线程通信方面起到的作用. 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存 ...

  5. 探索ADC的原理(自制3位并行比较型ADC)

    摘要 本文通过列举历史中出现的产品,梳理了模数转换器在20世纪30年代~~20世纪80年代末的发展历史.接下来,简要介绍模数转换器的原理.技术指标.分类和未来发展方向.最后,提供了一种自制3位FLAS ...

  6. TestNG离线安装步骤

    1.下载testNG 离线安装包[eclipse-testng离线包],并解压.资源可以在下载:http://download.csdn.net/detail/u012100968/9623613: ...

  7. 基于层级表达的高效网络搜索方法 | ICLR 2018

    论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构.论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习   来源:[晓飞的算法工程笔记] 公众号 ...

  8. 吉比特&雷霆游戏--2020春招实习

    笔试 题量较大,仅记了一些印象比较深刻的题. 题型为选择 + 填空(给C++代码填输出结果) + 编程 编程题不会太难,最难的就一道字符串的全排列(类似剑指offer第38题LeetCode链接)可以 ...

  9. 飞越面试官(三)--JVM

    大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林.   JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...

  10. Asp.Net Core Blazor之容器部署

    写在前面 Docker作为开源的应用容器引擎,可以让我们很轻松的构建一个轻量级.易移植的容器,通过Docker方式进行持续交付.测试和部署,都是极为方便的,并且对于我们开发来说,最直观的优点还是解决了 ...