1.前言
Web 服务器配置时常常会遇到这么个问题:80 端口已经被 Apache 或者 Tomcat 其中之一占用了,另一个怎么使用80端口? 最常见的解决方案是使用 Nginx 作为代理应用服务器,所以本文主要谈的并不是使用 Nginx 来解决这个问题,而是直接使用 Apache 作为代理应用服务器来解决。
2.背景介绍
- 服务器上原本已经有多个 PHP 站点部署在 Apache 下,使用 80 端口;
- 现在新增了一个 Java Web 项目,部署在 Tomcat 下, 使用 8080 端口;
- 两者各自在不同的端口均能正常访问,现在要求 Java Web 项目也要使用 80 端口。
3.Tomcat 配置
Tomcat 无需额外配置,只要如下配置,保证在 IP + port 能正常访问的情况下即可:
Tomcat Server.xml 部分相关配置
<!-- 默认配置,无需修改,检查一下即可 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- docBase 配置项目所在绝对路径 --> <Context docBase="D:\project\test" path="" reloadable="true" source="org.eclipse.jst.jee.server:test"/> </Host>
4.Apache 配置
Apache httpd.conf 模块加载
#LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so # 找到上面三个模块,去掉 # 开启模块 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
Apache httpd-vhosts.conf 配置
<VirtualHost *:80> ServerName test.shelwee.com ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/ ErrorLog "logs/test.shelwee.com.log" CustomLog "logs/test.shelwee.com.log" combined </VirtualHost>
配置完毕后,重启 Apache 服务器,然后开启 Tomcat 服务器。
5.代理过程说明
用户通过浏览器访问 test.shelwee.com 之后,Apache 会接收到这个请求,然后通过 AJP 协议转发到本地 8009 端口上,请求数据就能被 Tomcat 处理后返回。