阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用apache反向代理tomacat?

88次阅读
没有评论

共计 4140 个字符,预计需要花费 11 分钟才能阅读完成。

如何使用 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 提供服务的时候,主要的请求模型如下所示:

如何使用 apache 反向代理 tomacat?

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

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

[root@mogilenode2 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 的主要配置文件如下:

[root@mogilenode2 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 的默认监听的进程:

[root@mogilenode3 ~]# 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

[root@mogilenode3 ~]# 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

[root@mogilenode3 ~]# pstree -p 3166|wc -l

40

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

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

[root@mogilenode3 ~]# 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.

[root@mogilenode3 ~]# ps -ef|grep java

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

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

如何使用 apache 反向代理 tomacat?

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

如何使用 apache 反向代理 tomacat?

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

[root@mogilenode2 ~]# 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 服务器

web 服务器统计数据:

如何使用 apache 反向代理 tomacat?

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4140字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中