共计 2427 个字符,预计需要花费 7 分钟才能阅读完成。
问题由来
公司的 LAMP 服务器使用 Apache 的 VirtualHost 功能部署了多个拥有独立域名的网站。httpd.conf 配置文件部分如下:
# 省略本文无关部分
Listen 80
# www.xxx.com
<VirtualHost *>
ServerAdmin xxx@126.com
DocumentRoot “/var/www/xxx”
ServerName www.xxx.com
</VirtualHost>
# www.yyy.com
<VirtualHost *>
ServerAdmin yyy@126.com
DocumentRoot “/var/www/yyy”
ServerName yyy.com
ServerAlias www.yyy.com
</VirtualHost>
# 省略其他网站配置可见,Apache 侦听在 80 端口上,并依据域名来分发请求到不同的网站目录。
今天,公司决定在这个服务器上增加一个网站,该网站拥有独立域名 linuxidc.com,使用 JavaEE 开发,基于 Tomcat 运行。
由于已经有 Apache 侦听 80 端口,所以独立运行的 Tomcat 必然无法再侦听这个端口。而客户要求必须以 http://www.linuxidc.com 的形式访问网站,而不能是 http://www.linuxidc.com:8080。所以必须把 Tomcat 集成到 Apache 下面。
解决思路
要把 Tomcat 网站集成到 Apache 中,主要方式有两种。一是通过 AJP 协议,把 Tomcat 作为 Apache 的 worker;二是使用 mod_proxy 和 mod_proxy_http 模块转发请求至 Tomcat。
第一种方式,应该效率高,毕竟 Tomcat 也是 Apache 家的产品,集成起来相当稳定容易。
第二种方式,通用性强,不仅可以转发到 Tomcat,还可以转发到任意的 HTTP 服务器程序,如 IIS,另外的 Apache 实例。
根据个人爱好,我选择了第二种方式。
解决方案
首先让 Tomcat 侦听 8080 端口。
然后修改 httpd.conf。
# 加载转发模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# 把对 linuxidc.com 的访问全部转发给 Tomcat
<VirtualHost *>
ServerAdmin linuxidc@126.com
ServerName linuxidc.com
ServerAlias www.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
这样当用户访问 http://www.linuxidc.com 的时候,Apache 就会代替用户进而访问 http://localhost:8080,并把取回的 http 数据再转发给用户。这也就是 Apache 的逆向代理功能,这个代理的过程对浏览器客户来说是不可感知的,某种程度上也保护和隐藏了 Tomcat 服务(因为 Apache 是通过内网 http://127.0.0.1:8080 访问 Tomcat 服务的,http://www.linuxidc.com:8080 对外部互联网并不可见)。
与逆向代理(Reverse Proxy)相对应的是 Apache 的正向代理 (Forward Proxy) 功能,它需要浏览器端设置代理服务器。
将来扩展
这种方案其实具有很强的扩展性,对于缺少公网 IP 的 Web 服务器来说非常有意义。比如将来某天还需要部署一个基于 IIS 的网站。该网站域名为 linuxidc.com,运行在一个内网 Windows 机器上,IP 地址为 172.16.35.220,IIS 侦听在 80 端口上。那么就可以通过 Apache 的逆向代理功能来部署。
<VirtualHost *>
ServerAdmin linuxidc@126.com
ServerName linuxidc.com
ServerAlias www.linuxidc.com
ProxyPass / http://172.16.35.220/
ProxyPassReverse / http://172.16.35.220/
</VirtualHost>
这样当用户访问 http://www.linuxidc.com 的时候,Apache 就会从 http://172.16.35.220/ 上读取数据并转发结果给用户。
Ubuntu Server 14.04 安装 Web 服务器(Linux+Apache+MySQL+PHP) http://www.linuxidc.com/Linux/2015-06/119061.htm
Linux 下安装配置 PHP 环境(Apache2) http://www.linuxidc.com/Linux/2015-05/118062.htm
Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm
RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm
Apache 的详细介绍:请点这里
Apache 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-10/123947.htm