您的位置:首页 > 运维架构 > 反向代理

FreeBSD Squid -3.1 安装配置

2012-06-12 13:14 429 查看
Fetch http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.20.tar.gz 一、编译安装
./configure --prefix=/opt/local/squid --enable-arp-acl --enable-linux-netfilter --enable-pthreads --enable-err-language="Simplify_Chinese" --enable-default-err-language="Simplify_Chinese" --enable-underscores --disable-internal-dns --enable-pf-transparent --enable-referer-log
make
make install
-----------------------------------------------------------------
二、初始化
#Linux命令

#adduser squid

#addgroup squid
-----------------------------

#//freebsd命令

#pw groupadd squid

#pw useradd squid -g squid
#mkdir -p /usr/local/squid/var/cache
#mkdir -p /usr/local/squid/var/logs
#chown -R squid:squid /usr/local/squid/var/cache //默认nobody运行
#chown -R squid:squid /usr/local/squid/var/logs
#squid -z //初始化cache目录 #squid -zX 可查看初始化过程

-------------------------------------------------------------
三、配置/usr/local/squid/etc/squid.conf
vi /usr/local/squid/etc/squid.conf

特别说明:

如果你用的是squid2.X的版本,可能需要修改下面的两项:

1.这里要把默认配置上面的"http_access deny all"这一项注释掉.

2.如果squid用的端口为非80端口(如81)的话,需要在默认配置环境上面的Safe_port区域添加上"acl Safe_ports port 81" 这一行.不然会提示"Access Denied"错误,我就因为此问题搞好一个多星期才知道.
#==============================
# 主机名(3.0加入配置),无此项无法启动

visible_hostname www.testsquid.com
# 管理员邮箱,会显示在错误信息页面上,方便发生错误时联系!

cache_mgr root@localhost.localdomain
# 实现透明代理(squid2.7以上),其中vhost是必须的,这里的端口为squid监听的端口,默认为3128

http_port 80 accel vhost vport
# 缓存设置

cache_mem 256 MB

maximum_object_size_in_memory 2 MB
# 替换机制(lru叫做“最近不常用的单元”unit一般就是常说object, 也就是当 cache 中的内容比内存或硬盘达到上限时就需要进行数据的换进和换出工作)

memory_replacement_policy lru
# #设置cache_dir 缓存目录512M,其中一级目录16个,二级256个(每个一级下16个二级),第一个数字参数不能小于cache_mem设置的大小,否则会出警告“WARNING cache_mem is larger than total disk cache space!”。设置完了需用 squid -z来使cache目录生效。

cache_dir ufs /usr/local/squid/var/cache 512 16 256

max_open_disk_fds 0
#缓存内容大小控制,当cache目录被占用到97%时,内容将被清空20%

cache_swap_low 80

cache_swap_high 97
# 错误信息目录

error_directory /usr/local/squid/share/errors/Simplify_Chinese
# 最大和最小缓存对象

minimum_object_size 0 KB

maximum_object_size 30 MB
# 日志格式
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh

#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
设置access_log中日志存储的格式,access_log为客户端请求的日志

access_log /usr/local/squid/var/logs/page_zs_access_log combined
设置PID

pid_filename /usr/local/squid/var/logs/squid.pid
为squid自身的运行日志

cache_log /usr/local/squid/var/logs/cache.log
# 不记录store.log

cache_store_log none
# 指定代理服务器IP,2.5版本以上都是以cache_peer指定

# 需要将apache端口改成81(包括其虚拟机端口<这里最后补充说明>)

cache_peer 10.3.0.50 parent 81 0 no-query no-digest originserver name=www
squid2.5以上都是用的cache_peer来指定所需要代理的服务器的IP 这一点很重要!如果有多个虚拟主机,多写几行cache_peer_domain即可

cache_peer_domain www www.testsquid.com

cache_peer_access www allow all
# 允许客户端所有请求(这里可以设置拦截url,格式如下面两行缓存设置)

http_access allow all
# 设置不缓存url类型(空格隔开)

acl QUERY urlpath_regex .php .jsp .asp .pl .cgi

cache deny QUERY
#设置运行squid用户,一般不能以root运行

cache_effective_user squid

cache_effective_group squid

#设置清除squid缓存文件

acl AdminBoxes src 127.0.0.1 172.16.0.1 192.168.0.1

acl Purge method PURGE

http_access allow AdminBoxes Purge

http_access deny Purge

不显示/具体版本号

httpd_suppress_version_string off

refresh_pattern -i \.gif$ 1440 90% 2880refresh_pattern -i \.jpg$ 1440 90% 2880refresh_pattern -i \.png$ 1440 90% 2880refresh_pattern -i \.css$ 360 50% 2880refresh_pattern -i \.js$ 1440 50% 2880refresh_pattern -i \.xml$ 720 50% 2880refresh_pattern -i \.html$ 720 50% 1400

-----------------------------------------------------

测试配置是否正确
# /usr/local/squid/sbin/squid -k parse

通过crontab每天0点截断/轮循日志:
0 0 * * * (/usr/local/squid/sbin/squid -k rotate)

五、通过衬时查看squid日志来观察squid效果
tail -f /usr/local/squid/var/logs/page_zs_access_log

这样每当访问的时候,可以从这里看出来访问日志及读取时有没有通过后端Server的.

Squid 重定向实现
创建pl脚本....
vi /usr/local/squid/redirector.pl
-------------------------------------------------------------------

#!/usr/bin/perl -wl
$|=1;
while (<>) {
($uri,$client,$ident,$method) = ( );
($uri,$client,$ident,$method) = split;
if ($uri =~ m,^http://(www).(moxian).com/(.*)$,)
{
$uri = "301:http://moxian.com/$3";
}
else
{
$uri = $uri;
}
next;
} continue {
print "$uri";
}

---------------------------------------------------------------

vi /usr/local/squid/etc/squid.conf

增加

url_rewrite_program /opt/local/squid/redirector.pl 脚本路径
url_rewrite_children 20 启用脚本进程

保存....重启 squid 服务

squidclient使用

squidclient -p 80 mgr:info #取得squid运行状态信息
squidclient -p 80 mgr:mem #取得squid内存使用情况
squidclient -p 80 mgr:objects. use it carefully,it may crash #取得squid已经缓存的列表
squidclient -p 80 mgr:diskd #取得squid的磁盘使用情况
squidclient -p 80 -m PURGE http://www.xxx.com/1.jpg #强制更新某个url

2. 如何得知 squid 执行中的状态?

使用 cachemgr.cgi 这个安装好 squid 后就有,只要在 apache 配置一下
要查看 Cache Manager 时,只要用下面的方法,就行了,我以后晚点介绍一下这个 http://IP/cgi-bin/cachemgr.cgi 命令使用下面的方法
squidclient -t 1 -h localhost -p 80 mgr:inf #这样也行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  squid FreeBSD