利用Apache的转发模块实现反向代理服务器
2018-02-11 17:55
531 查看
问题又来
公司的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端口上,并依据域名来分发请求到不同的网站目录。今天,公司决定在这个服务器上增加一个网站,该网站拥有独立域名zzz.com,使用JavaEE开发,基于Tomcat运行。由于已经有Apache侦听80端口,所以独立运行的Tomcat必然无法再侦听这个端口。而客户要求必须以http://www.zzz.com的形式访问网站,而不能是http://www.zzz.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 # 把对zzz.com的访问全部转发给Tomcat <VirtualHost *> ServerAdmin zzz@126.com ServerName zzz.com ServerAlias www.com ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
这样当用户访问 http://www.zzz.com的时候,Apache就会代替用户进而访问http://localhost:8080,并把取回的http数据再转发给用户。这也就是Apache的逆向代理功能,这个代理的过程对浏览器客户来说是不可感知的,某种程度上也保护和隐藏了Tomcat服务(因为Apache是通过内网http://127.0.0.1:8080访问Tomcat服务的,http://www.zzz.com:8080对外部互联网并不可见)。与逆向代理(Reverse Proxy)相对应的是Apache的正向代理(Forward Proxy)功能,它需要浏览器端设置代理服务器。
将来扩展
这种方案其实具有很强的扩展性,对于缺少公网IP的Web服务器来说非常有意义。比如将来某天还需要部署一个基于IIS的网站。该网站域名为 aaa.com,运行在一个内网Windows机器上,IP地址为172.16.35.220,IIS侦听在80端口上。那么就可以通过Apache的逆向代理功能来部署。<VirtualHost *> ServerAdmin aaa@126.com ServerName aaa.com ServerAlias www.aaa.com ProxyPass / http://172.16.35.220/ ProxyPassReverse / http://172.16.35.220/
#ProxyPreserveHost on 解决反向代理获取不到真实地址和域名 ProxyPreserveHost on </VirtualHost>
这样当用户访问http://www.aaa.com的时候,Apache就会从http://172.16.35.220/上读取数据并转发结果给用户。
相关文章推荐
- 利用Apache的转发模块实现反向代理服务器
- 利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝
- 利用Apache端口转发实现虚拟主机服务器php+jsp共用80端口
- Ubuntu下利用Apache转发模块实现反向代理
- 利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝
- 配置apache 实现多域名反向代理转发
- 阿里云centos6.8利用snat实现内网服务器代理上网功能
- 使用Apache通过JK实现多Tomcat负载均衡集群时,Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题
- Nginx 教程二:利用nginx搭建静态文件服务、正向代理服务器、反向代理服务器
- Windows下使用Apache与Tomcat实现负载均衡/反向代理的三种解决方案
- 利用Apache模块mod_expires和mod_headers实现文件缓存
- 利用OC的消息转发机制实现多重代理
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- 转发代理服务器与反向代理服务器
- Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹——Jason niu
- Nginx反向代理Tomcat实现现负载均衡(高可用)以及利用redis+Session同步会话共享配置详解
- Nginx反向代理 实现4台服务器负载均衡
- apache 配置反向代理服务器
- 如何通过Apache mod_proxy 实现向后端反向代理,负载均衡。
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值