存档

‘大叔的唠叨’ 分类的存档

文件对比工具Beyond Compare BCompare-zh-3.2.3 3.2.4简体中文版+密钥

2011年11月6日 果果 1,244 条评论

Beyond Compare 是一款不可多得的专业级的文件夹和文件比对工具。使用它可以很方便的比对出两个文件夹或者文件不同之处。并把相差的每一个位元组用颜色加以表示,查看方便。并且支持多种规则对比。3.0 还将增加以往只使用插件才能实现的功能: 强大的 hex 比较~快速的装载并分析两个二进制文件的差别。是程序破解的重要辅助工具。全新的图片比较~通过像素化的比较找出两幅图片的不同!(大家来找茬自动版;))。比较 Mp3 的标签信息鉴别 Mp3 的不同。全新的向导式界面方便您迅速进入工作状态。总之 Beyond Compare 3 是各位做软件汉化,代码开发,破解必不可缺的辅助工具!

Beyond Compare 3官方网站:
http://www.scootersoftware.com
Beyond Compare 3简体中文版官方下载地址:
http://www.scootersoftware.com/BCompare-zh-3.2.4.13298.exe
Beyond Compare 3密钥:
— BEGIN LICENSE KEY —
mv1nPlXAywBDCdhxFc9QOVv6TBcQHLAXBQUAKTh3ie4fqSEOnWrPsnVkF
yt0wAkJHweoExRJWWVwwCniKNROSdJzJXE6YVapYW7f+tRRXRFI4yn4Nj
jZ0RiiqGRCTVzwComUcXB-eiFWRBY6JpSsCNkmIxL5KsRCo442djHhTZE
— END LICENSE KEY —–

以上为转载,以备以后需要。3.2.3 3.2.4版本通用

分类: 大叔的唠叨 标签:

Apache启用mod_proxy做正向代理、反向代理

2011年5月11日 果果 2,749 条评论

如果没有apache没有安装proxy模块,可以不用重新编译添加模块。

cd /home/cpeasyapache/src/httpd-2.2.17/modules/proxy
/usr/local/apache/bin/apxs -c -i mod_proxy.c proxy_util.c (ps 必须2个c一起编译,不然会报错)
/usr/local/apache/bin/apxs -c -i mod_proxy_http.c proxy_util.c

apache提供了mod_proxy模块用于提供代理服务,能够支持的包括正向代理、反向代理、透明代理、缓存、负载均衡,HTTP代理、FTP代理、SSL代理等若干强大的功能。

通常我们使用的比较多的,是正向代理。也就是在浏览器的网络连接属性框中,填写上一个代理服务器的ip和端口,即可通过代理服务器中转,去浏览网页。

配置正向代理非常简单:

首先在apache上启用mod_proxy模块,需要注意的是,如果在apache-2.2上,则还需要加载名为mod_proxy_http的模块。因为2.2系列把代理功能都拆分成N个小模块了。

打开apache的conf,加入如下几行:(全局配置)

ProxyRequests On
ProxyVia On

Order deny,allow
Deny from all
Allow from all

然后保存退出,重启加载apache服务:/etc/init.d/httpd restart或者做graceful也可以。 现在即可在浏览器的网络连接属性框中,填写上your_apache_server_ip的ip地址,端口是80,开始用代理了。

使用apache提供的代理,也可以加身份验证,或者设置ACL来限制客户端来源等。这些配置就和普通的apache站点配置一样。

配置反向代理就是个非常有用的功能。例如从某地访问google太慢,但是机房服务器上很快,则可在服务器上设置反向代理连接到google,也就是把google映射到服务器上来访问。

然后新建一个网站,即创建一个标准的配置段。这里我们将站点/google目录设置为google的反向代理。在这段里边,加入下边一内容:

ProxyRequests Off
ProxyPass /google http://www.google.com/
#ProxyPassReverse /google http://www.google.com/

然后保存配置文件重新启动apache。现在即可使用浏览器来访问我的网站的/google目录。当打开这个目录的时候,会发现页面是google。点击google的下级页面,都可以正常的打开访问,而此时浏览器中的代理服务器并未设置任何内容——这就是反向代理。

通过反向代理,我们可以将web服务器放置在防火墙后,在web服务器前端使用mod_proxy配置反向代理,并打开apache的mod_cache缓存模块,更可以极大的提高对静态内容的访问性能。

在RewriteRule指令中使用[P]标记也可以:
RewriteEngine On
RewriteRule ^/google/(.*) http://www.google.com/$1 [P]

首先要做的事情是: 访问域名xxx -> 通过 代理服务器B -> 访问 服务器C

首页把域名 www.morningprincess.com 和morningprincess.com指到自己的vps服务器确认自己的服务器中的Apache已经启用了proxymod和proxyhttp_mod,

sudo /etc/init.d/apache2 restart

然后在apache中增加站点

文件配置如下


ServerAdmin webmaster@example.com
ServerName morningprincess.com
ServerAlias www.morningprincess.com
ProxyRequests Off

Order deny,allow
Allow from all

ProxyPreserveHost on
ProxyPass / http://ghs.google.com/
ProxyPassReverse / http://ghs.google.com/

然后:

sudo /etc/init.d/apache2 reload
这样你就可以使用你的域名访问外面的服务器了

———————————————————————-

apache增加mod_cache模块参考链接:
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_cache.html
http://hi.baidu.com/houdelei250/blog/item/b0d83145089f428eb2b7dcda.html
apache mod_cache模块的编译
配apache mod_cache 后 /usr/local/apache/bin/apachectl restart
apache出现以下信息:
Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: 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@zhang2 cache]# 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 -a mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
编译mod_disk_cache:
/usr/local/apache/bin/apxs -c -i -a mod_disk_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
编译mod_mem_cache:
/usr/local/apache/bin/apxs -c -i -a mod_mem_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
至此,apache已经支持缓存了,再加上缓存配置就Ok!!!
1. 修改httpd.conf
示例:
LoadModule cache_module modules/mod_cache.so

#LoadModule disk_cache_module modules/mod_disk_cache.so
#如果你想使用mod_disk_cache代替mod_mem_cache的话,
#那么就取消上面的注释,并将下面的LoadModule行加上注释

CacheRoot /cacheroot
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3

LoadModule mem_cache_module modules/mod_mem_cache.so

CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048

#在充当代理的时候,不缓存update-list下的内容
CacheDisable http://security.update.server/update-list/

2. 创建缓存目录
#mkdir /var/www/cacheroot
#chown root.apache /var/www/cacheroot
#chmod 775 /var/www/cacheroot
3. 测试
重启apache,访问网站,会在/var/www/cacheroot下看到一堆文件夹。

Apache2缓存压缩模块
Apache2参考文档http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html
编译模块
cd httpd-2.2.11/modules
mod_expires.c mod_headers位于metadata目录下
mod_deflate.c 位于filters目录下
apxs -ica mod_deflate.c 生成so文件
#vi httpd.conf下添加:
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/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 -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c

安装时编译:
# tar –zxvf httpd-2.0.49.tar.gz
# cd httpd-2.0.49
#./configure –enable-cache –enable-disk-cache –enable-mem-cache
#mke
#make install

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 模块实现,先看个简单的配置例子:

CacheDefaultExpire 86400

CacheEnable disk /
CacheRoot /tmp/apacheCache
CacheDirLevels 5
CacheDirLength 5
CacheMaxFileSize 1048576
CacheMinFileSize 10

把上面的配置加到 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 模块实现,还是看个简单的配置吧,这样比较直观:-)

CacheEnable mem /
MCacheMaxObjectCount 20000
MCacheMaxObjectSize 1048576
MCacheMaxStreamingBuffer 65536
MCacheMinObjectSize 10
MCacheRemovalAlgorithm GDSF
MCacheSize 131072

简单说一下上面一些指令的意思:
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,除非设置了指令 CacheIgnoreNoLastMod On
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令 CacheStorePrivate On,否则不会被缓存
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令 CacheStoreNoStore On,否则不会被缓存
如果返回内容的头部信息“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 时则跳过不进行缓存操作
CacheIgnoreHeaders Set-Cookie
有时候需要缓存的时候跳过 URL 中的查询字符串?使用如下指令:
CacheIgnoreQueryString On
Apache 的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache 可以像 Squid一样做代理,而且做的还不错,下篇文章就介绍一下 Apache 的代理功能吧。善用 Apache的缓存功能,可以让你的网站速度提升不少。做为一个网站来说,虽然可用的各种缓存方案很多,但在 Web 服务器层做缓存的效率还是很值得一试的。

更多信息请参考:http://httpd.apache.org/docs/2.2/caching.html

一个httpd.conf的配置例子:

#一个连接的最大请求数量
MaxKeepAliveRequests 10000
#NT环境,只能配置这个参数来提供性能

#每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程
ThreadsPerChild 1900
#每个子进程能够处理的最大请求数
MaxRequestsPerChild 10000

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so


CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1


CacheEnable disk /
CacheRoot c:/cacheroot
CacheSize 327680
CacheDirLength 4
CacheDirLevels 5
CacheGcInterval 4


CacheEnable mem /
MCacheSize 8192
MCacheMaxObjectCount 10000
MCacheMinObjectSize 1
MCacheMaxObjectSize 51200

—————————————————————————————————–

一、前言
當人們對於網路的需求愈來愈高,網路頻寬的要求也日漸增加,在網路初期,有個文字模式的BBS 或GOPHER 已是非常今人興奮的事情,發展至WINDOW介面時,魔賽克、NETSCAPE等瀏覽器在網路上的應用,讓我們可以取得更豐富的資料,而今,上網看電視、聽廣播都是輕而易舉的事,但是對於網路傳輸流量也愈來愈大,所以,善用網路資源的同時,也更該節省網路資源。

二、Proxy 的概念
在安裝之前我們先釐清一個有關 PROXY 的概念,事實上 PROXY SERVER 有很多種類,如 IP Proxy 、Mail Proxy、Proxy Caching …等,而我們一般所稱的Proxy是指 Proxy Caching。

如果校園網路內有了Proxy伺服器,且所有CLIENT端的電腦都連接到Proxy伺服器上,當網域內有一台機器的瀏覽器透過 Proxy Server瀏覽過某個網站上的網頁後,這個被瀏覽過的網站資料就被複製一份到Proxy Server的cache (快取)空間裡,當其他使用者也要瀏覽這個已瀏覽過的網站時,就不用再透過對外的線路傳輸網頁資料,而是直接從Proxy Server的cache裡讀取網頁資料,所以Proxy Server可以大大的節省頻寬與加快用戶端讀取資料速度。

其實 Apache 也有Proxy 的功能,早期的CERN 也有相同的功能,但是他們主要功能是WWW SERVER,所以使用的人很少。在Unix like 系統中,Squid是使用率最廣的,因為 Squid Proxy Server是專為caching所設計的,Squid有一套自己的Cache階層體系,簡單的說就是Proxy Server間的關係有父(parent)、子(child)、兄弟姊妹(sibling)三種關係存在。善用這種階層的架構可以降低server 的負載和資料傳輸的速度。

三、安裝 Squid
如果我們在安裝RedHat + CLE 時,安裝的選項是[Everything],那Squid 就已經安裝在系統中,只是還沒被啟動而以。如果我們可以在 /etc/rc.d/init.d的目錄下看到 squid 這個檔案,而且在 /etc/squid 下有 squid.conf 的設定檔,那麼我們可以確定 squid 已經安裝好了,只是尚未被啟動而以,如果不是上述的情形,我們也可以自行安裝或昇級,首先你可能要掛上CD-ROM或者到大一點的FTP 站下載新的套件,再用 RPM 安裝,可以選擇 i386的檔案直接安裝,或者是用 src.rpm 的檔案,先自己 rebuild ,再安裝。

# rpm –Uhv squid-2.2*

# rpm –rebuild –target i686 squid-2.3.S

安裝完當然可以馬上啟動,或者利用 setup、ntsysv來設定開機時,讓squid啟動。但是我們對cache的目錄還未規劃,所以我們必須對 squid.conf做一些調整再行啟動。

四、squid.conf 的基本設定
1. 規劃 CACHE 目錄

預設值是 cache_dir /var/spool/squid 100 16 256

也就是在 /var/spool/squid 中增加16×256個目錄,而SQUID 就利用這4096個目錄來存放 100MB 的 CACHE 資料。而在實際的應用上,100MB 的空間實在太少了! 所以我們可以依 SERVER 上的空間來調整 CACHE 的大小,另外 16×256 這個目錄大小我們也可依server 上的實體記憶體和 cache 目錄大小來調整,原則上,除非記憶體大於 256 MB,CACHE 的目錄也需要到 10 GB 以上,否則 16×256 或 64×256 就可以了。

2. 記憶體設定

預設值是 #cache_mem 8 MB

一般來說大概是實際記憶的 1/3 ,如果只是單純做為 PROXY ,則可以調高為1/2 。

3. 開放存取設定 — 原始設定中只允許localhost本身使用,所以我們可以把 localhost 的 IP 範圍改成允許使用的IP範圍。

原來 => acl localhost src 127.0.0.1/255.255.255.255

改成 => acl localhost src 163.17.169.0/255.255.255.0

或者

原來 => httpd deny all

改成 => httpd allow all (安全性較低,不建議)

五、啟動 Squid
啟動 /etc/rc.d/init.d/squid start ;(啟動和停止的訊息都在/var/log/squid/cache.log)

停止 /etc/rc.d/init.d/squid stop

因為是以 rpm 安裝,所以在啟動時,程式(shell script)會自動偵測目錄是否存在,所以要改變 cache 目錄,只要在 squid.conf 設定好,重新啟動 squid 就可以!但要事先建立存放的主目錄,而且要注意目錄的擁有者。

六、進階設定
1. parent 和 sibling

若您要設定擷取上一層的Proxy Server資料,如139.175.159.98 (seed net 提供給本縣的proxy server) ,請在:

#cache_peer hostname type 3128 3130之下加入:

cache_peer 139.175.159.98 parent 3128 3130 no-query no-netdb-exchange no-digest

若您要設定同層的Proxy Server為Sibling關係,如:163.17.169.50、163.17.169.52,則加入:

cache_peer 163.17.169.50 sibling 3128 3130 proxy-only

cache_peer 163.17.169.52 sibling 3128 3130 proxy-only

[參數說明]

cache_peer:用來指定擷取快取Proxy的主機。

hostname:是指快取Proxy的主機名稱,也可用ip 。

type:用來指定擷取來源快取Proxy主機的型態,有:parent(上一層)、sibling(同一層)兩種。

3128:是http_port。用來取回所需的cache資料。

3130:是icp_port。用來詢問Server有沒有所需要的資料。

no-query:不做詢問動作,直接擷取資料。(用於parent-chile關係)

no-netdb-exchange:proxy server之間彼此部交換訊息。

no-digest:proxy server之間不建立Digest Table。(只用於Sibling)

proxy-only:直接讀取對方cache資料,而不存入本機。

2. 增加服務的速度

Squid Proxy內定的DNS查詢程式的數量是5,

# ps aux |grep squid

root 4388 0.0 0.3 3320 840 ? S 16:29 0:00 squid -D

squid 4390 0.0 1.7 6020 4396 ? S 16:29 0:00 (squid) -D

squid 4391 0.0 0.2 1476 700 ? S 16:29 0:00 (dnsserver)

squid 4392 0.0 0.1 1336 496 ? S 16:29 0:00 (dnsserver)

squid 4393 0.0 0.1 1336 496 ? S 16:29 0:00 (dnsserver)

squid 4394 0.0 0.1 1336 496 ? S 16:29 0:00 (dnsserver)

squid 4395 0.0 0.1 1336 496 ? S 16:29 0:00 (dnsserver)

從上列中您可發現第一個主服務是由root身分啟動,其他六個則是由squid身分啟動。而其中五個是dnsserver,我們可以增加 dnsserver的數目來增加服務的速度。

#dns_children 5,改為

dns_children 24 ;最大DNS查詢程式數量為32

3. LOG 檔案的處理

# logfile rotate 0

logfile_rotate 1

此設定必須配合 crontab 執行 /usr/sbin/squid -k rotate,例如我但可以設定在每天的零點二分做一次log 檔的備份,再利用 pwebstats 統計。

4.. 阻擋不良網站

# 不想讓學生玩線上遊戲 或者上到有關 sex 字眼的網站,連在搜尋的地方打上 sex 也擋下來喔!!
# 定義 game這個關鍵字所包含的站名,如 sex ,部份即可
acl game url_regex www.kuangchuan.com/game sex idolink
# 定義 sex 這個關鍵字所包含的網站
acl sex dstdomain playboy.com
# 攔下game , sex 所定義的網站
httpd deny game sex

在 squid 中,應用 acl 的參數,我們可以過濾網站內容,設定的方式也很多種,有興趣可以多研究 squid.conf 中的範例。

七、統量統計
下載以下兩個檔案

fly-1.6.5.Linux-2.1.125-i686.tar.gz

pwebstats-1.3.7.tar.gz

以下# 號後是應輸入的指令

# tar xzvf fly-1.6.5.Linux-2.1.125-i686.tar.gz

# cd fly-1.6.5

# cp fly /usr/sbin ;放置fly到可執行路徑,原位置也可以,

# mv pwebstats-1.3.7.tar.gz /home/httpd/html

# cd /home/httpd/html

# tar zxvf pwebstats-1.3.7.tar.gz

# cd pwebstats/conf

# pe2 squid-proxy.conf .

1. 修改squid-proxy.conf檔裡幾項項目: (以下各行中,# 為註解)

# pwebstats configuration file for http server

#

# Unique nickname for server.

# use only a-z, A-Z and _

# e.g. server:proxy

server:PROXY.XXXX.TCC.EDU.TW ;填入Server 名稱

# Header for index page.

# e.g. Server_header:The TelDem Enterprises Proxy Server

Server_header:台中縣XX國小Proxy Server流量分析

# Location of latest log file

logfile:/var/log/squid/access.log;如果有輪換檔,就指定輪換檔access.log.0路徑

# Location for the output of pwebstats.

# e.g. outdir:/home/servers/http/teldem/proxy-usage

outdir:/home/httpd/html/usage;統計結果的輸出網頁路徑,事先 mkdir

# directory containing GIF templates

# e.g. templates:/home/servers/http/pwebstats/templates

templates:/home/httpd/html/pwebstats/templates

# Stats collection interval

# can be one of daily, weekly, monthly, quarterly

interval:daily ; 統計的週期

# Location of ‘fly’

# e.g. fly_prog:/home/servers/http/pwebstats/fly/fly

fly_prog:/usr/sbin/fly ;指定fly程式路徑

12. 執行 ./pwebstats -c squid-proxy.conf即可產生流量分析網頁及圖表

13. 為了每天能自動對access.log.0進行分析產生流量分析網頁及圖表,您必須修改crontab,請執行 #crontab -u root -e,在原內容上加入敘述:(設定在做完log輪換檔後執行,每日清晨零點十分整做流量分析)

5 0 * * * /usr/sbin/squid -k rotate ;

10 0 * * * /home/httpd/html/pwebstats/pwebstats -c

/home/httpd /html/pwebstats/conf/squid-proxy.conf;絕對路徑

14. 在瀏覽器的URL位址輸入:http://hostname/usage/,即可顯示流量分析結果,如下圖顯示:

Internet Access Monitor for Squid

Firewall Analyzer

http://www.adventnet.com.cn/manageengine/products/firewall/help/index.html

面向缓存的站点规划1–mod_proxy

——————————————————————————————————————————–

一个利用APACHE的mod_proxy对多个站点进行做WEB加速http acceleration方案:

原先一个站点的规划可能是这样的:

*.*.*.1 culture.a.com
*.*.*.2/*.*.*.3/*.*.*.4/*.*.*.5 news.a.com
*.*.*.6 auto.a.com
… …

而在面向缓存服务器的设计中:所有站点都通过外部DNS指向到同一个IP(或者2台到3台):*.*.*.100/101(举例)

工作原理:
外部请求过来时,根据配置文件设置缓存进行转向解析。这样,服务器请求就可以转发到我们指定的内部地址上。
在处理多虚拟主机转向方面:mod_proxy比squid要简单一些:可以把不同服务转向后后台多个IP的不同端口上。

而squid只能通过禁用DNS解析,然后根据本地的/etc/hosts文件根据请求的域名进行地址转发,后台多个服务器必须使用相同的端口。
但是就性能上来说,专业级别的squid要比mod proxy要优秀的多。

今天先做出apache mod_proxy的文档。 明天应该会做出squid对多个站点进行web加速的文档

基于Apache mod_proxy的反向代理缓存加速实现:
Apache包含了mod_proxy模块,可以用来实现代理服务器,针对后台服务器的反向加速
注:Apache 2.x中mod_proxy已经被分离成mod_proxy和mod_cache:同时mod_cache有基于文件和基于内存的不同实现

实战测试1:
环境:一台sun ultra 60 for solaris 8 运行了bind 9 ,在上面添加了几个虚拟ip分别对应的地址是:
www.my.net 10.1.1.201
ftp.my.net 10.1.1.201
china.my.net 10.1.1.202
试验计划:先安装apache1.3.31,用来配置前面的cache server,然后再安装一个apache1.3.31,用来配置后面真正的web server。放些静态页面,然后做测试,得出结论。
1. 编译apache(用来做cache)

./configure –prefix=/usr/local/apache-front –enable-shared=max –enable-module=most && make && make install (请注意参考下面再进行操作)

编译时的错误:

1. ld.so.1: ./gen_test_char: fatal: libexpat.so.0: open failed: No such file or directory
解决:
bash-2.03# pkginfo|grep expat
application SMCexpat expat
然后察看/usr/local/lib发觉目录下有libexpat.so.0这个文件因此只要:
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
编译可以完成但是启动apache的时候却报错:
Syntax error on line 206 of /usr/local/apache-front/conf/httpd.conf:
Cannot load /usr/local/apache-front/libexec/mod_env.so into server: ld.so.1: /usr/local/apache-front/bin/httpd: fatal: relocation error: file /usr/local/apache-front/libexec/mod_env.so: symbol ap_palloc: referenced symbol not found
../bin/apachectl start: httpd could not be started
如果从配置文件把mod_env.so注释掉又会在模块env_module上报同样错误,看来不能用DSO模式编译
重新编译安装:

./configure –prefix=/usr/local/apache-front –enable-module=most && make && make install

2. 编译安装web server的apache:

./configure –prefix=/usr/local/apache-back && make && make install
3. 进行相应的配置:

创建/var/www/proxy目录,并且将权限设为nobody:nobody

修改apache-front的httpd.conf:
ServerAdmin admin@my.net
ServerName www.my.net

ProxyPass / http://china.my.net:8080/
ProxyPassReverse / http://china.my.net:8080/
# cache dir root
CacheRoot “/var/www/proxy”
# max cache storage
CacheSize 500M
# hour: every 4 hour
CacheGcInterval 4
# max page expire time: hour
CacheMaxExpire 240
# Expire time = (now – last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# defalt expire tag: hour
CacheDefaultExpire 1
# force complete after precent of content retrived: 60-90%
CacheForceCompletion 80
CustomLog /usr/local/apache-front/logs/access_log combined

修改apache-back的httpd.conf
Listen 10.1.1.202:8080
ServerAdmin root@my.net
ServerName china.my.net

基本配置就这些,如果有其他要求可以根据实际情况调整配置。

测试:
由于不进行压力测试,主要检查log的记录情况是否同原来不用代理情况一致。简单的放了一个小站点的htdocs文件,然后用telnet的方式访问80口,以及在windows客户端用浏览器访问。由于在实验机上做了简单的dns服务器,因此可以指定dns服务器为10.1.1.198,这样有个缺点就是不能访问internet上的网站了,另一种比较方便的方法是修改windows的hosts文件。添加一行10.1.1.202 china.my.net

结论:
除了速度方面没有进行测试以外,有几个很明显的优点就是:配置方便。log记录和原来一样,只是记录在运行mod_proxy的apache上,这样对于公司使用统计pv值的软件来说就没有问题了!

参考文档:

1. http://www.chedong.com/tech/cache.html 车东的文章:基于反向代理的Web缓存加速——可缓存的CMS系统设计(这篇文章的主要参考文档,我主要加了一下实例的操作)

2. http://www.apache.org apache的主页

3. http://www.squid-cache.org squid的主页

面向缓存的站点规划2–squid 收藏

squid我对它的了解还不够多,下面的测试仅仅是我实战的记录。可以保证按照这样做可以成功,不过squid.conf肯定还有很多地方配置的不完善,还好,这段时间会一直看这方面的文档。

这篇文章是全文的第二部分,第一部分可以参考面向缓存的站点规划1–mod_proxy

实战测试2:

1.实验计划:安装squid2.5 stable1,然后打squid-2.5.STABLE1-combined-logs.patch,参考http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html。进行相应配置,结合上次建立的apache-back,进行测试,检验log格式是不是combined的然后写结论。

友情提示:先别忙着做,因为开始是错误的,会推倒重来的^_^!

2.下载:
wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE1.tar.gz
wget http://www.squid-cache.org/mail-archive/squid-dev/200301/att-0164/squid-2.5.STABLE1-combined-logs.patch (事实证明这个patch是没有用的)

3. 打patch
bash-2.03# patch -p0 < squid-2.5.STABLE1-combined-logs.patch
Looks like a unified context diff.
Hunk #3 failed at line 808.
Hunk #4 failed at line 31.
Hunk #5 failed at line 1039.
3 out of 5 hunks failed: saving rejects to ./access_log.c.rej
有错误,先不管它,继续走下去试试

4. 编译:
./configure --prefix=/usr/local/squid --enable-useragent-log --enable-referer-log --enable-default-err-language=Simplify_Chinese && make && make install

/opt/test/apache/squid-2.5.STABLE1/src/main.c:601: undefined reference to `mallopt'

推倒重来:查看squid官方网站,发觉stable1是在2002年9月25日就推出的,明显太老,索性换上STABLE6,重新编译,编译方式一样!这次没有那个错误了!不过patch还是有问题,最后也证明patch没有效果的!因此不必打。

5. 配置:
配置squid.conf

http_port 10.1.1.202:80
httpd_accel_host 10.1.1.201
acl acceleratedHost dst 10.1.1.201/255.255.255.255
httpd_accel_port 80
acl acceleratedPort port 8000
httpd_accel_with_proxy on
acl all src 0.0.0.0/0.0.0.0
acl my.net src 10.1.1.0/255.255.255.0
http_access allow acceleratedHost acceleratedPort
http_access allow my.net
http_access deny all

配置httpd.conf
Listen 10.1.1.202:8000

启动apache

/usr/local/apache-front/bin/apachectl graceful

配置环境:
mkdir /usr/local/squid1/var/cache
chown -R nobody:nobody /usr/local/squid1/var/cache
chown -R nobody:nobody /usr/local/squid1/var/logs

启动squid
创建缓存目录:
/usr/local/squid/sbin/squid -z
启动squid
/usr/local/squid/sbin/squid
停止squid:
/usr/local/squid/sbin/squid -k shutdown
启用新配置:
/usr/local/squid/sbin/squid -k reconfig

结论:

性能也没有进行测试,不过按照常理来说性能一定要比mod_proxy强不少。不过怎么样才能使它记录apache的combine格式的日志还没有搞定,郁闷!

apache做反向代理服务器

apache做反向代理服务器
apache代理分为正向代理和反向代理:
1 正向代理: 客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web(需要在客户端的浏览器中设置代理服务器)
适用于: ①局域网的代理服务器(一般是网关,相当于squid的一般用法)
②访问某个受限网络的代理服务器,如教育网访问某些国外网站需要找代理
2 反向代理: 客户端能访问外部的web,但是不能访问目标web,目标web所在的网络内一台机器充当目标web的代理,客户端直接访问代理就像访问目标web一样(此代理对客户端透明,即客户端不用做如何设置,并不知道实际访问的只是代理而已,以为就是访问的目标)
适用于: ①idc的某台目标机器只对内开放web,外部的客户端要访问,就让另一台机器做proxy,外部直接访问proxy即相当于访问目标
②idc的目标机器的某个特殊的web服务跑在非正常端口如9000,而防火墙上只对外开放了80,此时可在80上做proxy映射到9000,外部访问80即相当于9000
简单示意图如下

本例中
机器192.168.0.114是我们的reverse proxy server
apache/2.0.63运行在其80端口
上面有两个域名的虚拟主机
www.a.org
www.b.org
要实现的效果是:
访问 www.a.org 即相当于访问另一台机器192.168.0.115
访问 www.b.org 即相当于访问本机的9000端口

apache的proxy功能由其proxy模块实现.加载模块有两种方式:静态和动态,现分别说明:
一 静态加载
静态加载,在编译apache时候编译进去,编译参数如下:
"./configure" \
"-prefix=/usr/local/apache3" \
"--enable-so" \
"--enable-rewrite" \
"--with-mpm=prefork" \
"--enable-proxy" \ (这个参数即是代理模块启用)
安装完成后查看模块列表
/usr/local/apache3/bin/httpd -l
显示
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_proxy.c
proxy_connect.c
proxy_ftp.c
proxy_http.c
prefork.c
http_core.c
.......
编辑配置文件 httpd.conf
在虚拟主机部分
NameVirtualHost *:80

ServerAdmin webmaster@dummy-host.example.com
ServerName www.a.org
ProxyRequests Off

Order deny,allow
Allow from all

ProxyPass / http://192.168.0.115/
ProxyPassReverse / http://192.168.0.115/


ServerAdmin webmaster@dummy-host.example.com
ServerName www.b.org
ProxyRequests Off

Order deny,allow
Allow from all

ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

二 动态加载
动态加载:编译进一个已经装好了的apache中(编译为dso模块)
已经装好的apache在 /usr/local/apache2
进入apache源码的模块目录进行编译
cd httpd-2.0.63/modules/proxy/
/usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_connect.c proxy_http.c proxy_util.c

从输出里面看到apache的modules目录下已经产生了mod_proxy.so,且已经在httpd.conf中激活了
cd /usr/local/apache2/conf/
ls ../modules/ 看到确实有mod_prxoy.so
编辑配置文件
vi httpd.conf
修改如下

加载模块
LoadModule proxy_module modules/mod_proxy.so (这句是编译激活时产生的)
LoadModule proxy_http_module modules/mod_proxy.so (这句是要手动添加的)

虚拟主机的部分加上
NameVirtualHost *:80

ServerAdmin webmaster@dummy-host.example.com
ServerName www.a.org
ProxyRequests Off

Order deny,allow
Allow from all

ProxyPass / http://192.168.0.115/
ProxyPassReverse / http://192.168.0.115/


ServerAdmin webmaster@dummy-host.example.com
ServerName www.b.org
ProxyRequests Off

Order deny,allow
Allow from all

ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/

重启apache生效

注:
如果不加LoadModule proxy_http_module modules/mod_proxy.so,则浏览器页面打不开,页面显示
Forbidden
You don’t have permission to access / on this server.
日志acess_log里面显示
192.168.0.28 – - [03/Jun/2009:16:16:27 +0800] “GET /?sessionId=4293567494722637330&rand=1244014624405&CONTEXT=0&page=com.othe
r.AjaxWhoWhatUpdate&xrand=1244016991554&wwRandId=1244014624405&wwBugId=2341&wwType=View HTTP/1.1″ 403 315
或者
192.168.0.28 – - [03/Jun/2009:17:10:32 +0800] “GET / HTTP/1.1″ 403 315
即403错误
日志error_log里面显示
[Wed Jun 03 17:08:46 2009] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_p
roxy, make sure the proxy submodules are included in the configuration using LoadModule.

Memcached官方:http://danga.com/memcached/

关于Memcached的介绍请参考:Memcached深度分析

memcached主要的作用是为减轻大访问量对数据库的冲击,所以一般的逻辑是首先从memcached中读取数据,如果没有就从数据库中读取数据写入 到memcache中,等下一次读取的时候就可以从memcached中读取了。但在项目中的具体应用策略(也就是哪些数据应该缓存?怎么样缓存?过期策 略?)就是个问题了。

Memcached安装比较简单:

wget wget http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
wget http://www.monkey.org/~provos/libevent-1.4.6-stable.tar.gz
tar -zxvf libevent-1.4.6-stable.tar.gz
cd libevent-1.4.6-stable
./configure && make && make install
vi /etc/ld.so.conf
新增”/usr/local/lib”
tar -zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6
./configure –prefix=/usr/local/memcache
make && make install
cd /usr/local/memcache/bin
./memcached -d -m 10 -u root -l 192.168.100.4 -p 12000 -c 256 -P /tmp/memcached.pid

netstat看一下监听端口,以下证明memcached已经起来了
[root@syslog-250-205 bin]# netstat -nlp | grep 12000
tcp 0 0 10.0.250.205:12000 0.0.0.0:* LISTEN 5124/memcached
udp 0 0 10.0.250.205:12000 0.0.0.0:* 5124/memcached

参数说明

-d选项是启动一个守护进程
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB
-u是运行Memcache的用户,我这里是root
-l是监听的服务器IP地址
-p是设置Memcache监听的端口,最好是1024以上的端口
-c选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定
-P是设置保存Memcache的pid文件

长沙六天建起十五层旅馆视频,youtube上米国人民的回帖。

2010年11月25日 果果