http://z00w00.blog.51cto.com/515114/1031287
http://sjsky.iteye.com/blog/1067119
本文作者Michael,永久链接:http://sjsky.iteye.com/blog/1067119
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
Apache是通过加载各个模块来提供相应的服务,本文主要详细介绍如何利用apache配置代理服务器。当然Apache可以被配置为正向(forward)和反向(reverse)代理,下面分别从这两方面重点介绍:
提供CHM版参考手册下载:Apache 2.2 简体中文参考手册.chm(金步国翻译)
示例环境为:windows vista+apache2.2.19,以下配置亲测均通过
一、正向代理forward proxy
[1]、概念及用途
正向代理是一个位于客户端和目标原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标原始服务器,然后代理向原始服务
器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理,比如我们经常需要在浏览器中设置代理来访问一些网站。
保护和隐藏客户端访问者
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
[2]、配置及演示
打开文件conf/httpd.conf,搜索到以下内容,去掉注释加载相应模块(去掉前面的“#”即可)
LoadModule proxy_http_module modules/mod_proxy_http.so
在文件httpd.conf的末尾加上如下内容:
Include conf/extra/httpd-proxy.conf
下一步,创建文件conf/extra/httpd-proxy.conf,内容如下:
- #michale proxy config file
- <IfModule mod_proxy.c>
- #Forward Proxy(正向代理)
- ProxyRequests On
- ProxyVia On
- #允许本机和以192.168.8前缀IP的主机访问该代理
- <Proxy *>
- #注意Deny,Allow之间不要有空格
- Order Deny,Allow
- Deny from all
- Allow from 127.0.0.1 192.168.8
- </Proxy>
- #下面的配置相当于一个二级代理,访问twitter.com的请求,再转给本地代理8580端口
- ProxyRemote http://twitter.com/ http://127.0.0.1:8580
- #ProxyRemoteMatch .*.youtube.com/|.*.twitter.com/ http://127.0.0.1:8580
- </IfModule>
[3]、缓存cache配置
在文件httpd-proxy.conf中增加如下配置信息:
- LoadModule cache_module modules/mod_cache.so
- <IfModule mod_cache.c>
- LoadModule disk_cache_module modules/mod_disk_cache.so
- <IfModule mod_disk_cache.c>
- CacheRoot d:/proxycache/
- CacheDirLevels 5
- CacheDirLength 3
- CacheMaxFileSize 1000000
- CacheMinFileSize 64
- </IfModule>
- CacheEnable disk /
- CacheDefaultExpire 3600
- CacheMaxExpire 86400
- # When acting as a proxy, don't cache the list of security updates
- #CacheDisable /local_files
- CacheIgnoreCacheControl On
- CacheIgnoreHeaders Set-Cookie
- </IfModule>
相关配置属性的详细信息请查阅参考手册,如果缓存配置成功,访问页面后会在目录d:/proxycache/ 下生成一系列文件夹和文件
二、反向代理reverse proxy
[1]、概念及用途
反向代理正好相反,对于客户端而言它就是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向原始服务器转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
保护和隐藏原始资源服务器
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓
冲服务。另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
[2]、配置及演示
把上面正向代理中的配置文件:conf/extra/httpd-proxy.conf,修改成如下内容:
- <IfModule mod_proxy.c>
- #Reverse Proxy(反向代理)
- <Proxy *>
- Order Deny,Allow
- Deny from all
- Allow from 127.0.0.1 192.168.8
- </Proxy>
- ProxyRequests Off
- #proxy setting
- ProxyPass /svnman http://192.168.8.49:8080/svnman
- ProxyPassReverse /svnman http://192.168.8.49:8080/svnman
- #此处项目名称/svnman代理时没有变化,session不会丢失,不需要配置下面的属性
- #ProxyPassReverseCookiePath /svnman /svnman
- #可以配置多反向代理,添加多对ProxyPass、ProxyPassReverse即可
- ProxyPass /log http://192.168.8.7:8550/logman
- ProxyPassReverse /log http://192.168.8.7:8550/logman
- #此处项目名称/logman代理时为/log,需要配置如下信息,否则session会丢失
- ProxyPassReverseCookiePath /logman /log
- #配置跟代理,必需放在最后面,否则其他二级访问的反向代理会失败
- ProxyPass / http://127.0.0.1:8082/webdemo/
- ProxyPassReverse / http://127.0.0.1:8082/webdemo/
- #此处项目名称 /webdemo/ 代理为 / 跟目录访问,session会丢失,需要配置如下信息
- ProxyPassReverseCookiePath /webdemo /
- </IfModule>
注意点说明:
- ProxyRequests 反向代理时设置为Off
- ProxyPass、ProxyPassReverse配对出现,如果只配置了ProxyPass,那么浏览器的地址栏内容会变成反向代理的原始地址
- 可配置多个反向代理,只要添加多对ProxyPass、ProxyPassReverse即可
- 如果配置时项目名称变化了比如上面的 /logman->/log /webdemo/->/,此时的session会丢失,需要增加属性ProxyPassReverseCookiePath配置(如上面的配置文件)
- 如果同时配置跟访问和二级访问的代理,跟目录代理的配置必须放在最后面,否则其他反向代理的配置会失败
三、启动异常处理方法
配置文件修改后,如果启动pache服务失败,报错信息类似:the requested operation has failed,有可能是配置文件存在语法错误不能正常解析,可以用apaceh提供的httpd相关命令检查,如果有错误会有相关提示,具体用法如下:
Syntax error on line 6 of D:/Program Files/Apache2.2/conf/extra/httpd-proxy.conf:
order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'
#此处是由于配置文件中allow, deny的逗号后多了空格,去掉后即可通过
D:\Program Files\Apache2.2\bin>httpd -t
Syntax OK
如果语法检查通过,但是仍然启动失败,这时需要根据日志文件:logs/error.log中记录的错误信息具体分析了。
========================
透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了,例如Garden 2程序。
如何使用透明代理
透明代理技术中的透明是指客户端感觉不到代理的存在,不需要在浏览器中设置任何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺省网关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需数据然后拷贝给客户端。理论上透明代理可以对任何协议通用。
但是在这种情况下客户端必须正确设置DNS服务器。因为现在浏览器不设置任何代理。则DNS查询必须由browser来解析,也就是要由客户端必须在TCP/IP中设置的正确的DNS服务器,其完成dns解析。
私有网地址为192.168.1.*, 其中客户机是192.168.1.100,防火墙机器网卡是192.168.1.1。透明web代理被安装在防火墙机器上并配置端口为8080。内核使用iptables把与防火墙端口80的连接重定向到代理服务。