使用apache反向代理tomacat

起源

在大部分的生产环境中,基本上使用的都是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在进行反向代理的时候,必须存在几个模块,具体如下:

[[email protected] extra]# httpd -M |grep proxy

 proxy_module (shared)

 proxy_connect_module (shared)

 proxy_ftp_module (shared)

 proxy_http_module (shared)

 proxy_scgi_module (shared)

 proxy_ajp_module (shared)

 proxy_balancer_module (shared)

Syntax OK

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

apache的主要配置文件如下:

[[email protected] extra]# cat httpd-vhosts.conf 

NameVirtualHost *:80

<VirtualHost *:80>

    DocumentRoot "/usr/local/apache/htdocs"

    ServerName www.kel.com 

    ServerAlias kel.com

    ProxyVia On

    ProxyRequests Off

    ProxyPreserveHost On 

    ProxyPass /status !

    ProxyPass  / ajp://192.168.1.238:8009/

    ProxyPassReverse  / ajp://192.168.1.238:8009/

    #ProxyPass  / http://192.168.1.238:8080/

    #ProxyPassReverse  / http://192.168.1.238:8080/

    ErrorLog "logs/www.kel.com-error_log"

    CustomLog "logs/www.kel.com-access_log" common

</VirtualHost>

<Location /status>

    SetHandler server-status

    Order allow,deny

    Allow from all

</Location>

  

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

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

[[email protected] ~]# ps -ef|grep java

root      3166     1  0 17:08 pts/0    00:00:25 /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=2048 -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

root      3219   863  0 18:00 pts/0    00:00:00 grep java

[[email protected] ~]# netstat -tnlp|grep java

tcp        0      0 :::8080                     :::*                        LISTEN      3166/java           

tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      3166/java           

tcp        0      0 :::8009                     :::*                        LISTEN      3166/java           

[[email protected] ~]# pstree -p 3166|wc -l

40

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

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

[[email protected] ~]# telnet 127.0.0.1 8005(直接关闭tomcat服务)

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is ‘^]‘.

SHUTDOWN

Connection closed by foreign host.

[[email protected] ~]# ps -ef|grep java

root      3244   863  0 18:13 pts/0    00:00:00 grep java

测试

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

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

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

[[email protected] ~]# curl -I http://www.kel.com

HTTP/1.1 503 Service Temporarily Unavailable

Date: Sat, 23 Sep 2017 22:27:37 GMT

Connection: close

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服务器统计数据如下:

?

时间: 2024-08-07 21:18:55

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

Apache反向代理结合Tomcat集群来实现负载均衡(一)

好的博文一般都能做到"望题知文",看下标题就知道下边要讲的内容,写这个标题时犹豫了一下,本来要将标题定位apache+tomcat实现负载均衡,可是又觉得这样显得比较模糊,后来想了一下,觉得利用Apache做负载均衡底层结合的是tomcat的集群功能,所以便用了这个标题. 首先先做下集群与负载均衡的概念区分,很多人一直都不理解这两个概念,不知道该如何区分这两个概念,又觉得这两个概念仿佛是一个技术的两个术语,其实不然,下边介绍下这两个概念: 什么是集群(Cluster) 所谓集群是指一组

apache反向代理和负载均衡

正向代理:正如我们用的游戏加速代理,大多的个人PC把请求发给正向代理服务器,代理服务器通常配置高端的带宽,替我们请求相应的服务 负载均衡中的反向代理:通常意义上,是一个请求转发的代理.类似一个收发室的管理人员,外来的很多邮件,传到收发室,然后由管理员分配给不同的办公室.通过这样的操作,可以使每台服务器避免过多的负载导致宕机.而转发的这个过程,通常也有很多种不同的算法. 总结:正向代理一般是指PC连接到代理服务器,由代理服务器转发请求到网站.而反向代理指的是用户将请求发送给反向代理服务器,由反向代

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

Apache 反向代理 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一种方式,要坚持. 金天微信:15998603918 欢迎找我聊聊天.  笔者开发了一套node.js的web应用,想实现https协议,至于node.js原生的实现https协议笔者这里并没有研究. 其实很简单, 默认node.js express会监听3000端口,HTTP协议. 如果想通过https访问node.

使用Apache通过JK实现多Tomcat负载均衡集群时,Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题

前些天在做Apache通过JK实现多Tomcat负载均衡集群时,参考网上的配置将配置文件配置好后,访问已存在tomcat中的JSP文件时发现Apache提示URL不存在,然后检查了配置文件及tomcat工程部署,发现配置部署均无问题.尝试访问Apache静态页面,通过http单独访问tomcat均无问题.然后我猜会不会之前参考的网上的配置有问题,于是继续查询网上其它配置发现都差不多,尝试更改各种参数均没有解决.后来我仔细想了想出现这个问题的原因应该是Apache没有将HTTP请求分发给Tomca

linux apache 反向代理

查看apache运行状态 ps -eaf|grep httpd 查看apache安装环境 httpd -V 查看apache网络状态,包括端口等 netstat -anp|grep httpd 打开httpd.conf 确认proxy模块加载没有被注释掉 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so 在文件末尾加上代理配置路径 ProxyPas

Apache反向代理配置

Apache反向代理配置方法如下 1.打开Apache的配置文件httpd.conf,找到下面的内容,将注释去掉,以启动代理模块 LoadModule proxy_module modules/mod_proxy.so  LoadModule proxy_http_module modules/mod_proxy_http.so 2.在配置文件httpd.conf最后添加 <IfModule mod_proxy.c> ProxyRequests off <Proxy /> Orde

tomcat配置及基于nginx、apache反向代理tomcat

如今,基于Web的应用越来越多,传统的Html已经满足不了如今的需求.我们需要一个交互式的Web,于是便诞生了各种Web语言.如Asp,Jsp,Php等.当然,这些语言与传统的语言有着密切的联系,如Php基于C和C 语言,Jsp基于Java语言.Tomcat即是一个Jsp和Servlet的运行平台. Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新

Apache 反向代理设置

环境: Debian7.5 + apache2.2.24(wdcp/wdlinux) 1.转至apache源码包的proxy目录: cd /v/softs/lanmp/httpd-2.2.24/modules/proxy 2.执行apxs命令,编译得到mod_proxy.so: sudo /www/wdlinux/apache/bin/apxs -c -i -a mod_proxy.c mod_proxy_connect.c mod_proxy_http.c proxy_util.c #命令完成

Ubuntu下Apache反向代理设置

Apache可通过mod_proxy*.so系列模块很好的实现正向.反向代理功能,亦可通过反向代理实现负载均衡,本文将讲述基于Apache反向代理实现负载均衡的配置方法. 1.环境配置说明: 代理服务器域名:ap.proxy web server 1 ip:192.168.195.18 port:80 web server 2 ip:192.168.195.19 port:80 backup server ip:192.168.195.20 port:80 2.确认开启模块:mod_proxy,