[教程]FreeBSD下squid3.0安装教程
By admin
- 4 minutes read - 660 words以下文章,虽然在FreeBSD下安装,linux下的安装方法类似.只是一些命令如fetch=>wget变更一下即可.
如何您是在FreeBSD下用ports来安装的话,前两步基本可以省略,默许的安装路径为/usr/local/sbin/squid,配置目录为/usr/local/etc/squid。
此版本好像有漏洞,安装时请使用最新的稳定版本: http://www.cnbeta.com/articles/121237.htm
一、编译安装
#fetch http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz #tar zxvf squid-3.0.STABLE25.tar.gz //稳定版 #cd squid-3.0.STABLE25 #./configure –prefix=/usr/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
注:–enable-internal-dns 做多个网站反向代理时使用,允许使用内部dns,也可改/etc/hosts.
也可以通过ports来安装
# cd /usr/ports/www/squid #make install clean
这此用户组名squid将自动产生,无需手动创建
====================================================
二、初始化
#Linux命令 #adduser squid #addgroup squid
#//freebsd命令 #pw groupadd squid #pw useradd squid -g squid -s
#mkdir /usr/local/squid/var/cache
#mkdir /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 可查看初始化过程
在/etc/hosts中:加入内部的DNS解析,比如:
192.168.1.65 www.testsquid.com
三、配置/usr/local/squid/etc/squid.conf
#vim /usr/local/squid/etc/squid.conf
(4700多行配置….. 大多是注释,不管它,光标移到最后加入以下配置)
特别说明: 如果你用的是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 192.168.1.65:80 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 %h” “%{User-Agent}>h” %Ss:%Sh
#logformat combined %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %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 192.168.1.65 parent 81 0 no-query no-digest originserver name=www
squid2.5以上都是用的cache_peer来指定所需要代理的服务器的IP 这一点很重要!如果有多个虚拟主机,多写几行cache_peer_domain即可,参考:. cache_peer_domain wwwwww.testsquid.comcache_peer_accesswww 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
#============================== 四、创建缓存目录并启用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 parse
出现ERROR:
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log /usr/local/squid/var/logs/cache.log: Permission denied messages will be sent to ‘stderr’. 2008/03/13 12:53:09| Creating Swap Directories FATAL: Failed to make swap directory /usr/local/squid/var/cache: (13) Permission denied
很明显权限不对,修改后测试通过!
使用新配置启动:
#/usr/local/squid/sbin/squid -k reconfigure
通过crontab每天0点截断/轮循日志:
0 0 * * * (/usr/local/squid/sbin/squid -k rotate)
可以用以下命令寻找已经缓存的文件
#cd /usr/local/squid/var/cache www.haohtml.com
#find -type f |xargs ls –l
五、通过衬时查看squid日志来观察squid效果
可以通过日志来对squid缓存文件来进行监控
#tail -f /usr/local/squid/var/logs/access.log
这样每当访问的时候,可以从这里看出来访问日志及读取时有没有通过后端Server的.
六、清除squid缓存
squidclient简要介绍(-h host参数这里没有指定,host为监听squid的ip地址)
*取得squid运行状态信息: 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
*强制更新某个url:squidclient -p 80 -m PURGE http://www.haohtml.com/static.php
*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:
要清除一个缓存,执行命令
#./squidclient -m PURGE -h 192.168.1.65 -p 80 http://bbs.abc.com/index.htm HTTP/1.0 200 OK Server: squid/3.0.STABLE25 Mime-Version: 1.0 Date: Fri, 22 Jul 2011 19:55:57 GMT Content-Length: 0 X-Cache: MISS from cnc12.34.56.78 Via: 1.0 cnc12.34.56.78 (squid/3.0.STABLE25) Connection: close
可以看到返回的是200值的,说明发现缓存并清除成功,如果返回的是404的话,则说明没有发现缓存信息.对于返回值只有200和404(HTTP/1.0 404 Not Found)两种.
注意执行squidclient的时候一定要指明-h参数,我测试的时候发现如果指定为127.0.0.1的话,则提示403,权限不够的问题.不是太清楚什么原因.不知道是否与cache_peer后面的ip有关系的.
补充说明
端口使用情况:
apache 81
squid 80
这样设置的原因是方便squid直接拦截客户端发来的http请求。如果不更改apache默认的80端口,squid设置其他可用端口时,例如3128,需要将80请求转发到3128,否则用户可能直接通过域名+端口的形式访问到,这里为了安全禁止此访问方式.命令如下:
#iptables -t nat -A PREROUTING -s 192.168.1.65 -p tcp –dport 80 -j REDIRECT 3128
注:此命令必须每次开机后运行,可以写成开机执行任务脚本.其实还有一种简单的方法就是让81商品只监听127.0.0.1这个ip地址也可以的.
所以,本人感觉修改apache端口比较简单,修改步骤:
#vim /usr/local/apache/conf/httpd.conf
修改:Listen 81
如有虚拟主机设置,则还需要修改虚拟主机配置:
#vim /usr/local/apache/conf/extra/httpd-vhosts.conf
修改:NameVirtualHost *:81
五.启动squid
/usr/local/squid/sbin/squid -Nd1 ps aux |grep squid 查看是否启动
Squid开机自动启动 1.ports安装方法
编辑/etc/rc.conf文件,添加如下行:
squid_enable = “YES”
2.手动安装方法(参考:)
vi /usr/local/etc/rc.d/squid.sh
#!/bin/sh
# if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
# echo "$0: Cannot determine the PREFIX" >&2
# exit 1
# fi
case "$1" in
start)
if [ -x /usr/local/squid/sbin/squid -a -f /usr/local/squid/etc/squid.conf ]; then
(cd /usr/local/squid/var/logs; /usr/local/squid/sbin/squid >/dev/null 2>&1 &) ; echo -n ' squid Start OK!'
fi
;;
stop)
/usr/local/squid/sbin/squid -k shutdown 2>&1
# Uncomment this if you'd like the system to (attempt to
# wait for) squid to shut down cleanly
#echo "Sleeping for 45 seconds to allow squid to shutdown.."
#sleep 45
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0
这样每次启动后,squid就会自动运行,相关命令如下(这里用的默认的3128测试,以方便大家理解)。
#chmod +x squid.sh #/usr/local/etc/rc.d/squid.sh start 启动squid #netstat -an | grep 3128 #/usr/local/etc/rc.d/squid.sh stop 停止squid #netstat -an | grep 3128
六.测试访问WEB站点 本机hosts 文件指向squid代理服务器 出现ERROR: Access Denied. 访问拒绝 Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.
当前的存取控制设定禁止您的请求被接受,如果您觉得这是错误的,请与您网路服务的提供者联系。 本缓存服务器管理员:webmaster
配置文件设置不对: acl all src 0.0.0.0/0.0.0.0 http_access allow all
重新测试:OK 一切正常~~~查看相应日志
现在大家肯定急着要打开浏览器访问你的网站看看效果吧,其实没啥变化,要等到有流量访问,squid把文件都装到内存后,效果才明显。可以用top命令观察squid的内存使用情况或者用
cat /var/log/squid/access.log |grep TCP_MEM_HIT
如果看到很多的TCP_MEM_HIT ,这表明该文件是从内存缓存读取的,squid已经起作用了!你再用浏览器打开该文件,应该是快如闪电了。。呵呵,大功告成了!还有其他类型的HIT,如TCP_HIT等等,这些是从磁盘读取的,我觉得加速的意义不大,只不过缓解了apache的压力而已。
总体来说,squid 配置不是很麻烦,主要是配置文件里的每一项,对服务器的产生的影响非常的重要。细节决定成功~
七,其它
squid默认情况下是不缓存一些动态扩展名的文件的,如php,jsp,cgi之类的,如果要缓存php文件的话,在文件头加入以下一行即可.
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);
对于前面为squid,后端是php动态的,就算用了rewrite重写了url,由于php输出的时候没有指定这个修改日期标记,同样为TCP_MISS的.
参考: 和 http://www.haohtml.com/server/unix/46603.html
对于squid的安全设置请参考:
对于squid日志文件详细请参考: 和