Apache启用modproxy做正向代理反向代理详细版.docx
《Apache启用modproxy做正向代理反向代理详细版.docx》由会员分享,可在线阅读,更多相关《Apache启用modproxy做正向代理反向代理详细版.docx(20页珍藏版)》请在冰豆网上搜索。
Apache启用modproxy做正向代理反向代理详细版
Apache启用mod_proxy做正向代理、反向代理(详细版)
如果没有apache没有安装proxy模块,可以不用重新编译添加模块。
cd/home/cpeasyapache/src/httpd-2.2.17/modules/proxy
/usr/local/apache/bin/apxs-c-imod_proxy.cproxy_util.c(ps必须2个c一起编译,不然会报错)
/usr/local/apache/bin/apxs-c-imod_proxy_http.cproxy_util.c
apache提供了mod_proxy模块用于提供代理服务,能够支持的包括正向代理、反向代理、透明代理、缓存、负载均衡,HTTP代理、FTP代理、SSL代理等若干强大的功能。
通常我们使用的比较多的,是正向代理。
也就是在浏览器的网络连接属性框中,填写上一个代理服务器的ip和端口,即可通过代理服务器中转,去浏览网页。
配置正向代理非常简单:
首先在apache上启用mod_proxy模块,需要注意的是,如果在apache-2.2上,则还需要加载名为mod_proxy_http的模块。
因为2.2系列把代理功能都拆分成N个小模块了。
打开apache的conf,加入如下几行:
(全局配置)
ProxyRequestsOn
ProxyViaOn
Orderdeny,allow
Denyfromall
Allowfromall
然后保存退出,重启加载apache服务:
/etc/init.d/httpdrestart或者做graceful也可以。
现在即可在浏览器的网络连接属性框中,填写上your_apache_server_ip的ip地址,端口是80,开始用代理了。
使用apache提供的代理,也可以加身份验证,或者设置ACL来限制客户端来源等。
这些配置就和普通的apache站点配置一样。
配置反向代理就是个非常有用的功能。
例如从某地访问google太慢,但是机房服务器上很快,则可在服务器上设置反向代理连接到google,也就是把google映射到服务器上来访问。
然后新建一个网站,即创建一个标准的配置段。
这里我们将站点/google目录设置为google的反向代理。
在这段里边,加入下边一内容:
ProxyRequestsOff
ProxyPass/google
#ProxyPassReverse/google
然后保存配置文件重新启动apache。
现在即可使用浏览器来访问我的网站的/google目录。
当打开这个目录的时候,会发现页面是google。
点击google的下级页面,都可以正常的打开访问,而此时浏览器中的代理服务器并未设置任何内容——这就是反向代理。
通过反向代理,我们可以将web服务器放置在防火墙后,在web服务器前端使用mod_proxy配置反向代理,并打开apache的mod_cache缓存模块,更可以极大的提高对静态内容的访问性能。
在RewriteRule指令中使用[P]标记也可以:
RewriteEngineOn
RewriteRule^/google/(.*)[P]
首先要做的事情是:
访问域名xxx->通过代理服务器B->访问服务器C
首页把域名和指到自己的vps服务器确认自己的服务器中的Apache已经启用了proxymod和proxyhttp_mod,
sudo/etc/init.d/apache2restart
然后在apache中增加站点
文件配置如下
ServerAdminwebmaster@
ServerName
ServerAlias
ProxyRequestsOff
Orderdeny,allow
Allowfromall
ProxyPreserveHoston
ProxyPass/
ProxyPassReverse/
然后:
sudo/etc/init.d/apache2reload
这样你就可以使用你的域名访问外面的服务器了
———————————————————————-
apache增加mod_cache模块参考链接:
apachemod_cache模块的编译
配apachemod_cache后/usr/local/apache/bin/apachectlrestart
apache出现以下信息:
Cannotload/usr/local/apache/modules/mod_cache.sointoserver:
/usr/local/apache/modules/mod_cache.so:
undefinedsymbol:
cache_generate_key_default
正规解决方案:
modules/cache下面有很多的.c文件
mod_cache.c编译得到mod_cache.so主要用来控制整个apache的cache功能。
mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c这个三个文件编译后得到各自的cache支持模块。
[root@zhang2cache]#find.-name“*cache*.c”-print
./cache_storage.c
./cache_pqueue.c
./mod_cache.c
./cache_hash.c
./mod_mem_cache.c
./mod_file_cache.c
./mod_disk_cache.c
./cache_util.c
./cache_cache.c
mod_cache.c还需要其他的程序来进行工作,包括cache_*.c这些文件。
因此apxs动态加载一个模块的时候,需要把这些文件和mod_cache.c一起编译:
编译mod_cache:
/usr/local/apache/bin/apxs-c-i-amod_cache.ccache_util.ccache_cache.ccache_storage.ccache_pqueue.ccache_hash.c
编译mod_disk_cache:
/usr/local/apache/bin/apxs-c-i-amod_disk_cache.ccache_util.ccache_cache.ccache_storage.ccache_pqueue.ccache_hash.c
编译mod_mem_cache:
/usr/local/apache/bin/apxs-c-i-amod_mem_cache.ccache_util.ccache_cache.ccache_storage.ccache_pqueue.ccache_hash.c
至此,apache已经支持缓存了,再加上缓存配置就Ok!
!
!
1.修改httpd.conf
示例:
LoadModulecache_modulemodules/mod_cache.so
#LoadModuledisk_cache_modulemodules/mod_disk_cache.so
#如果你想使用mod_disk_cache代替mod_mem_cache的话,
#那么就取消上面的注释,并将下面的LoadModule行加上注释
CacheRoot/cacheroot
CacheEnabledisk/
CacheDirLevels5
CacheDirLength3
LoadModulemem_cache_modulemodules/mod_mem_cache.so
CacheEnablemem/
MCacheSize4096
MCacheMaxObjectCount100
MCacheMinObjectSize1
MCacheMaxObjectSize2048
#在充当代理的时候,不缓存update-list下的内容
CacheDisablehttp:
//security.update.server/update-list/
2.创建缓存目录
#mkdir/var/www/cacheroot
#chownroot.apache/var/www/cacheroot
#chmod775/var/www/cacheroot
3.测试
重启apache,访问网站,会在/var/www/cacheroot下看到一堆文件夹。
Apache2缓存压缩模块
Apache2参考文档
编译模块
cdhttpd-2.2.11/modules
mod_expires.cmod_headers位于metadata目录下
mod_deflate.c位于filters目录下
apxs-icamod_deflate.c生成so文件
#vihttpd.conf下添加:
LoadModuledeflate_modulemodules/mod_deflate.so
LoadModuleexpires_modulemodules/mod_expires.so
LoadModuleheaders_modulemodules/mod_headers.so
modules/cache下面有很多的.c文件,大致用途如:
mod_cache.c编译得到mod_cache.so主要用来控制整个apache的cache功能。
mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c这个三个文件编译后得到各自的cache支持模块。
mod_cache.c还需要其他的程序来进行工作,包括cache_*.c这些文件。
因此apxs动态加载一个模块的时候,需要把这些文件和mod_cache.c一起编译:
perl/usr/local/apache2/bin/apxs-ciamod_cache.ccache_util.ccache_cache.ccache_storage.ccache_pqueue.ccache_hash.c
安装时编译:
#tar–zxvfhttpd-2.0.49.tar.gz
#cdhttpd-2.0.49
#./configure–enable-cache–enable-disk-cache–enable-mem-cache
#mke
#makeinstall
Apache从2.0开始就已经可以使用缓存模块了,不过在2.0的时候还是实验性的,到了2.2已经完全可以放心的使用。
Apache的缓存实现主要依靠mod_cache、mod_disk_cache、mod_file_cache及mod_mem_cache。
只需在配置编译的时候加上参数:
–enable-cache、–enable-disk-cache、–enable-file-cache、–enable-mem-cache即可。
关于Apache的编译安装本文就不再说了,可以参考以前的文章。
这里主要介绍一下如何配置使用Apache的缓存功能。
具体来说,Apache的缓存方式有两种,一种是基于硬盘文件的缓存,由mod_disk_cache实现,另一种是使用内存缓存,由mod_mem_cache实现,不过它们都是依赖mod_cache模块的,mod_cache模块提供了一些缓存配置的指令供它们使用,而mod_file_cache模块是搭配mod_mem_cache模块使用的,下面分别进行介绍。
1、基于硬盘文件的缓存
基于硬盘文件存储的缓存由mod_disk_cache模块实现,先看个简单的配置例子:
CacheDefaultExpire86400
CacheEnabledisk/
CacheRoot/tmp/apacheCache
CacheDirLevels5
CacheDirLength5
CacheMaxFileSize1048576
CacheMinFileSize10
把上面的配置加到Apache的httpd.conf文件中,如果缓存相关的模块都已经编译进了Apache的核心,则无需加载模块,直接就能使用上面的指令。
指令的详细说明如下:
CacheDefaultExpire:
设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效
CacheEnable:
启用缓存,第1个参数是缓存类弄,这里当然是disk了,第2个参数是缓存路径,指的是url路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存/docs下的所有文件
CacheRoot:
缓存文件所在的目录,运行Apache的用户(如daemon或nobody)要能对其进行读写,如果不清楚的话可以直接设置成777,请手动建立该目录并设置好访问权限
CacheDirLevels:
缓存目录的深度,默认是3,这里设置为5
CacheDirLength:
缓存目录名的字符长度,默认是4,这里设置为5
CacheMaxFileSize和CacheMaxFileSize:
缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为1M和10bytes
基于硬盘文件存储的文件基本上就这些内容,设置好后重启Apache应该就能使用了。
一切正常的话,可以在缓存目录下看到Apache自动建立的一些目录和缓存的数据文件。
2、基于内存的缓存
基于内存的缓存主要由mod_mem_cache模块实现,还是看个简单的配置吧,这样比较直观:
-)
CacheEnablemem/
MCacheMaxObjectCount20000
MCacheMaxObjectSize1048576
MCacheMaxStreamingBuffer65536
MCacheMinObjectSize10
MCacheRemovalAlgorithmGDSF
MCacheSize131072
简单说一下上面一些指令的意思:
CacheEnable:
启用缓存,使用基于内存的方式存储
MCacheMaxObjectCount:
在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000
MCacheMaxObjectSize:
单个缓存对象最大为1M,默认是10000bytes
MCacheMaxStreamingBuffer:
在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为65536,该值通常小于100000或MCacheMaxObjectSize设置的值
MCacheMinObjectSize:
单个缓存对象最小为10bytes,默认为1bytes
MCacheRemovalAlgorithm:
清除缓存所使用的算法,默认是GDSF,还有一个是LRU,可以查一下Apache的官方文档,上面有些介绍
MCacheSize:
缓存数据最多能使用的内存,单位是kb,默认是100kb,这里设置为128M
保存重启Apache基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。
3、注意事项
使用缓存需要注意如下事项:
要使用缓存,必须使用指令CacheEnable启用它,目前可用的缓存类型为disk或mem,禁止缓存可以使用CacheDisable,如CacheDisable/private
待缓存的URL返回的状态值必须为:
200、203、300、301或410
URL的请求方式必须是GET方式
发送请求时,头部中包含“Authorization:
”的字符串时,返回的内容将不会被缓存
URL包含查询字符串,如问号?
后的那些东西,除非返回的内容包含“Expires:
”,否则不会被缓存
如果返回的状态值是200,则返回的头部信息必须包含以下的一种才会被缓存:
Etag、Last-Modified、Expires,除非设置了指令CacheIgnoreNoLastModOn
如果返回内容的头部信息“Cache-Control:
”中包含“private”,除非设置了指令CacheStorePrivateOn,否则不会被缓存
如果返回内容的头部信息“Cache-Control:
”中包含“no-sotre”,除非设置了指令CacheStoreNoStoreOn,否则不会被缓存
如果返回内容的头部信息“Vary:
”中包含了“*”,不会被缓存
4、其它一些指令的介绍
如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在Apache启动的时候就把它们的内容缓存到内存中(当然要启用内存缓存系统),使用的是mod_file_cache模块,具体如下:
有多个文件可以用空格格开
MMapFile/var/www/html/index.html/var/www/html/articles/index.html
上面是缓存文件的内容到内存中,除此之外,还可以只缓存文件的打开句柄到内存中,当有请求进来的时候,Apache直接从内存中获取文件的句柄,返回内容,和MMapFile指令很像,具体如下:
CacheFile/var/www/html/index.html/var/www/html/articles/index.html
上面两个指令所缓存的文件如果有修改的话,必须重启Apache或使用graceful之类的方式强制使Apache更新缓存数据,否则当用户访问的时候获取的不是最新的数据。
有时候需要根据某些特殊的头部信息来决定是否进行缓存,则可以使用如下指令:
当头部信息中包含Set-Cookie时则跳过不进行缓存操作
CacheIgnoreHeadersSet-Cookie
有时候需要缓存的时候跳过URL中的查询字符串?
使用如下指令:
CacheIgnoreQueryStringOn
Apache的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache可以像Squid一样做代理,而且做的还不错,下篇文章就介绍一下Apache的代理功能吧。
善用Apache的缓存功能,可以让你的网站速度提升不少。
做为一个网站来说,虽然可用的各种缓存方案很多,但在Web服务器层做缓存的效率还是很值得一试的。
更多信息请参考:
http:
//httpd.apache.org/docs/2.2/caching.html
一个httpd.conf的配置例子:
#一个连接的最大请求数量
MaxKeepAliveRequests10000
#NT环境,只能配置这个参数来提供性能
#每个进程的线程数,最大1920。
NT只启动父子两个进程,不能设置启动多个进程
ThreadsPerChild1900
#每个子进程能够处理的最大请求数
MaxRequestsPerChild10000
LoadModulecache_modulemodules/mod_cache.so
LoadModuledisk_cache_modulemodules/mod_disk_cache.so
LoadModulemem_cache_modulemodules/mod_mem_cache.so
CacheForceCompletion100
CacheDefaultExpire3600
CacheMaxExpire86400
CacheLastModifiedFactor0.1
CacheEnabledisk/
CacheRootc:
/cacheroot
CacheSize327680
CacheDirLength4
CacheDirLevels5
CacheGcInterval4
CacheEnablemem/
MCacheSize8192
MCacheMaxObjectCount10000
MCacheMinObjectSize1
MCacheMaxObjectSize51200
—————————————————————————————————–
一、前言
當人們對於網路的需求愈來愈高,網路頻寬的要求也日漸增加,在網路初期,有個文字模式的BBS或GOPHER已是非常今人興奮的事情,發展至WINDOW介面時,魔賽克、NETSCAPE等瀏覽器在網路上的應用,讓我們可以取得更豐富的資料,而今,上網看電視、聽廣播都是輕而易舉的事,但是對於網路傳輸流量也愈來愈大,所以,善用網路資源的同時,也更該節省網路資源。
二、Proxy的概念
在安裝之前我們先釐清一個有關PROXY的概念,事實上PROXYSERVER有很多種類,如IPProxy、MailProxy、ProxyCaching…等,而我們一般所稱的Proxy是指ProxyCaching。
如果校園網路內有了Proxy伺服器,且所有CLIENT端的電腦都連接到Proxy伺服器上,當網域內有一台機器的瀏覽器透過ProxyServer瀏覽過某個網站上的網頁後,這個被瀏覽過的網站資料就被複製一份到ProxyServer的cache(快取)空間裡,當其他使用者也要瀏覽這個已瀏覽過的網站時,就不用再透過對外的線路傳輸網頁資料,而是直接從ProxyServer的cache裡讀取網頁資料,所以ProxyServer可以大大的節省頻寬與加快用戶端讀取資料速度。
其實Apache也有Proxy的功能,早期的CERN也有相同的功能,但是他們主要功能是WWWSERVER,所以使用的人很少。
在Unixlike系統中,Squid是使用率最廣的,因為SquidProxyServer是專為caching所設計的,Squid有一套自己的Cache階層體系,簡單的說就是ProxyServer間的關係有父(parent)、子(child)、兄弟姊妹(sibling)三種關係存在。
善用這種階層的架構可以降低server的負載和資料傳輸的速度。
三、安裝Squid
如果我們在安裝RedHat+