手机版
你好,游客 登录 注册
背景:
阅读新闻

利用Apache的转发模块实现反向代理服务器

[日期:2015-10-09] 来源:Linux社区  作者:smstong [字体: ]

问题由来
公司的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

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款