起源

在大部分的生产环境中,基本上使用的都是java程序,从而促进了各种应用程序中间件的产生,在这里大概有几种,tomcat作为最著名的开源servlet容器,jboss也是开源的,而且有管理界面,主要是redhat的,而weblogic则是oracle的商业中间件,而webspare则是IBM的商业中间件,其他的几个例如jetty,resin用的也就比较少了。

在安装tomcat的时候,每次首先需要安装的是jdk,提供jvm虚拟机,jre运行环境,从而每次安装jdk的时候,有几种选择,生产环境基本上使用的都是openjdk,不会产生版权的问题,在开发环境一般使用的是oracle的jdk。在安装完jdk之后,一般都要输出一个环境变量为JAVA_HOME。

在java中,JVM也分为几种,一种是oracle的JRokit虚拟机,主要是使用在weblogic上面;一种是IBM的J9虚拟机,主要使用在IBM的webspare中;一种则是Hotspot,主要使用在openJDK上面。

在生产环境中,servlet的变化为,tomcat——webspare——jboss,小的时候使用开源的,因为免费;慢慢变大,因为维护问题,变成收费;越来越大,又采取了开源,因为免费。前任使用的是weblogic

配置apache反代tomcat

在使用apache反向代理tomcat提供服务的时候,主要的请求模型如下所示:

客户端浏览器发送http请求到apache,然后apache将用户的请求反响代理到后端的tomcat服务器之中,在apache进行反代的时候,可以使用http协议或者是ajp协议,而ajp协议的运行效率比http效率更高,从而一般使用的是ajp协议。

apache在进行反向代理的时候,必须存在几个模块,具体如下:

  1. [root@mogilenode2 extra]# httpd -M |grep proxy
  2.  
  3. proxy_module (shared)
  4.  
  5. proxy_connect_module (shared)
  6.  
  7. proxy_ftp_module (shared)
  8.  
  9. proxy_http_module (shared)
  10.  
  11. proxy_scgi_module (shared)
  12.  
  13. proxy_ajp_module (shared)
  14.  
  15. proxy_balancer_module (shared)
  16.  
  17. Syntax OK

在进行编译安装的时候,默认是不会安装代理的模块的,从而在编译的时候可以添加选项,--enable-proxy,--enable-proxy-http,--enable-proxy-ajp,如果已经安装完成,也可以采用DSO的机制,使用命令apxs -ica mod_proxy.c来进行动态装载模块。

apache的主要配置文件如下:

  1. [root@mogilenode2 extra]# cat httpd-vhosts.conf
  2.  
  3. NameVirtualHost *:80
  4.  
  5. <VirtualHost *:80>
  6.  
  7. DocumentRoot "/usr/local/apache/htdocs"
  8.  
  9. ServerName www.kel.com
  10.  
  11. ServerAlias kel.com
  12.  
  13. ProxyVia On
  14.  
  15. ProxyRequests Off
  16.  
  17. ProxyPreserveHost On
  18.  
  19. ProxyPass /status !
  20.  
  21. ProxyPass / ajp://192.168.1.238:8009/
  22.  
  23. ProxyPassReverse / ajp://192.168.1.238:8009/
  24.  
  25. #ProxyPass / http://192.168.1.238:8080/
  26.  
  27. #ProxyPassReverse / http://192.168.1.238:8080/
  28.  
  29. ErrorLog "logs/www.kel.com-error_log"
  30.  
  31. CustomLog "logs/www.kel.com-access_log" common
  32.  
  33. </VirtualHost>
  34.  
  35. <Location /status>
  36.  
  37. SetHandler server-status
  38.  
  39. Order allow,deny
  40.  
  41. Allow from all
  42.  
  43. </Location>

  

在配置文件中,主要参数分别介绍如下:ServerName表示主机名,主要用来区分虚拟主机,ProxyVia 主要是给http添加头部响应信息,表示经过了此apache服务器,ProxyRequests 主要是表示使用的正向代理还是反向代理,Off表示使用的是反响代理,ProxyPreserverHost表示是否将主机名反向代理给后端主机,当tomcat有多个虚拟主机的时候,需要开启,ProxyPass主要用来表示反响代理到后端的哪个主机,当使用感叹号的时候,表示不反代,由apache直接响应,需要反代的时候,需要写上后端的协议,主机名和端口号,ProxyPass主要是为了解决重定向的问题,其他的两个为日志信息,ServerAlias表示主机别名,用这个名称也可以进行访问,status主要是用来查看apache的状态页面信息。

查看tomcat的默认监听的进程:

  1. [root@mogilenode3 ~]# ps -ef|grep java
  2.  
  3. root : pts/ :: /usr/java/latest/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize= -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
    -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat
    -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
  4.  
  5. root : pts/ :: grep java
  6.  
  7. [root@mogilenode3 ~]# netstat -tnlp|grep java
  8.  
  9. tcp ::: :::* LISTEN /java
  10.  
  11. tcp ::ffff:127.0.0.1: :::* LISTEN /java
  12.  
  13. tcp ::: :::* LISTEN /java
  14.  
  15. [root@mogilenode3 ~]# pstree -p |wc -l

根据上面可以看到,默认tomcat监听了三个端口,也就是三个连接器connector,其中8080使用的是http协议,主要用来接受用户请求响应,8005监听的本地localhost的地址,主要是用来管理tomcat进程,而8009使用的是ajp协议。在使用apache进行反代的时候,可以看到配置文件中,当使用http协议反代的时候,使用的端口是8080,当使用ajp协议反代的时候,使用的端口是8009.可以看到默认情况下,tomcat开启了40个线程。

查看管理进程的命令使用:

  1. [root@mogilenode3 ~]# telnet 127.0.0.1 8005(直接关闭tomcat服务)
  2.  
  3. Trying 127.0.0.1...
  4.  
  5. Connected to 127.0.0.1.
  6.  
  7. Escape character is '^]'.
  8.  
  9. SHUTDOWN
  10.  
  11. Connection closed by foreign host.
  12.  
  13. [root@mogilenode3 ~]# ps -ef|grep java
  14.  
  15. root 3244 863 0 18:13 pts/0 00:00:00 grep java

测试

​使用网页测试,在使用网页测试的时候,主要修改hosts的域名解析地址:

​查看响应头信息如下(会看到在apache中添加的指令ProxyVia添加的首部信息):

​当关闭tomcat服务之后,服务端的响应如下所示:

  1. [root@mogilenode2 ~]# curl -I http://www.kel.com
  2.  
  3. HTTP/1.1 503 Service Temporarily Unavailable
  4.  
  5. Date: Sat, 23 Sep 2017 22:27:37 GMT
  6.  
  7. Connection: close
  8.  
  9. Content-Type: text/html; charset=iso-8859-1


    ​在查看响应码的时候,状态码为503,表示服务暂时不可用,这种可以作为在生产环境中出问题判断问题处在哪里。

​吐槽一下apache,apache做为最经典的web服务器,占用的市场份额,那么大,语法太复杂了,和nginx比起来一个天上一个地下,在进行动静分离的时候,nginx更加适合,在使用和tomcat结合的时候,apache适合点,毕竟都是apache旗下的产物,更容易结合,而且有专门的协议ajp来进行传输。

​httpd本来就复杂,然后IBM还弄了一个webspare,俗称WAS,结合的方式就是用httpd,然后摇身一变变成了IHS,语法变得更加复杂,在进行反向代理负载均衡的时候,简直就是一坨屎,不想吐槽,然而很多人追求稳定性,说webspare,然而在使用集群的时候,体验并不是那么的好。

​使用nginx,更简单易用的web服务器。

  • 运维Linux和python

  WEB服务器统计数据如下:

使用apache反向代理tomacat的更多相关文章

  1. Apache 反向代理实现为http添加https的外衣

    Apache 反向代理 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一种方式,要坚持. ...

  2. [转]用apache反向代理解决单外网ip对应内网多个web主机的问题

    用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...

  3. Apache反向代理的配置

    Apache反向代理的配置 一: Mac系统自带apache服务器 1. 查看apache版本命令如下:   sudo apachectl -v 2. 启动apache   sudo apachect ...

  4. NodeJS学习笔记 - Apache反向代理集成实现

    初学,简单的实现,为进行优化. 1. 假设NodeJS服务端监听3000端口 2. Apache反向代理设置 a. 在httpd.conf配置文件中开启代理模块 LoadModule proxy_mo ...

  5. 配置apache反向代理进行跨域

    配置apache反向代理 打开配置文件httpd.conf 开启 proxy_http_module 和 proxy_module 模块,将#号删除 #LoadModule proxy_module ...

  6. apache反向代理和负载均衡

    正向代理:正如我们用的游戏加速代理,大多的个人PC把请求发给正向代理服务器,代理服务器通常配置高端的带宽,替我们请求相应的服务 负载均衡中的反向代理:通常意义上,是一个请求转发的代理.类似一个收发室的 ...

  7. apache反向代理

    正向代理是客户端发送请求给代理服务器,代理服务器将请求发给实际处理的服务器 反向代理是客户端发送请求给服务器(实际上是个代理服务器),服务器将请求发给实际处理的服务器 情景 在一台服务器上开了apac ...

  8. apache 反向代理配置

    配置前资料检查: 1.可以使用的apache 安装apache服务:打开cmd , 在apache的bin目录下执行以下命令 httpd -k install -n apache2.2    其中&q ...

  9. apache反向代理 负载均衡

    开启模块: LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule slotmem_sh ...

随机推荐

  1. HTML 输入类型

    HTML 输入类型 输入类型 本章描述 <input> 元素的输入类型. 输入类型:text <input type="text"> 定义供文本输入的单行输 ...

  2. HTML脚本配置Android自动化测试

    说明   在项目配置完基于robotium框架下的自动化测试用例后发现虽然用代码配置测试用例虽然较为灵活,但是如果编写较为全面的测试用例则必然会消耗大量开人员的精力,并且对于用例的后期维护也是很大一部 ...

  3. C++中4个类型转换相关的关键字/特点/应用场合

    reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型:能够将任何的整数类型转换成指针类型,反之亦然:滥用reinterpret_cast强制类 ...

  4. SQL Server 2014 64位版本链接32位Oracle数据库

    问题背景: 刚进入公司不久的BI新手,最近接部门的一个交接项目,需要在SQL Server上通过openquery来获取Oracle数据库的数据.各种配置,各种设置折腾了一周之久.在此,将自己的问题解 ...

  5. 详细教程:将本地项目上传到github

    作为 一个工程师,将本地项目上传到github进行备份和分享是一个不错的技能,一来可以方便以后的工作,二来可以分享自己的成果.所以下面本人详细教大家如何将本地项目上传到github,十分简单,一学就会 ...

  6. EL表达式的js函数传参问题

    <!Doctype html> <html> <head> <title>js的传参问题</title> <script type=& ...

  7. stylus选中hover元素的兄弟元素下的子元素

    stylus设置兄弟元素样式:鼠标浮动在 .video-li 元素上时,.video-li 兄弟中 .video-info 下的 .word 显示. .video-li &:hover ~ . ...

  8. chrome开发工具指南(十三)

    模拟传感器:地理定位与加速度计 由于大多数桌面设备都没有 GPS 芯片和加速度计,所以测试它们比较困难.Chrome DevTools 的 Sensors 模拟窗格可以通过模拟常见的移动设备传感器来降 ...

  9. protobuf和thrift对比

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt383 数据类型 protobuf thrift protobuf thrif ...

  10. 软工+C(2017第5期) 工具和结构化

    // 上一篇:Alpha/Beta换人 // 下一篇:最近发展区/脚手架 工具/轮子 软件工程/计算机相关专业的一个特点是会使用到众多的工具,工具的使用是从程序猿进化到程序员的一个关键要素.软件工程师 ...