一、概念:
反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。
二、假设环境:
DNS将www.example.com解析到squid服务器192.168.209.253
当client访问www.example.com网站时,则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。
三、建立脚本:
- #!/bin/bash
- #BY liyaoyi 2012-05-04
- #install squid
- #down install
- useradd squid
- wget wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.gz
- tar zxf squid-3.1.19.tar.gz
- cd squid-3.1.19
- #install
- ./configure -prefix=/usr/local/squid3 \
- -enable-async-io=100 \
- -with-pthreads \
- -enable-storeio="aufs,diskd,ufs" \
- -enable-removal-policies="heap,lru" \
- -enable-icmp \
- -enable-delay-pools \
- -enable-useragent-log \
- -enable-referer-log \
- -enable-kill-parent-hack \
- -enable-arp-acl \
- -enable-default-err-language=Simplify_Chinese \
- -enable-err-languages="Simplify_Chinese English" \
- -disable-poll \
- -disable-wccp \
- -disable-wccpv2 \
- -disable-ident-lookups \
- -disable-internal-dns \
- -enable-basic-auth-helpers="NCSA" \
- -enable-stacktrace \
- -with-large-files \
- -disable-mempools \
- -with-filedescriptors=65535 \
- -enable-internal-dns \
- -enable-epoll \
- -enable-ssl \
- -enable-x-accelerator-var
- make
- make install
- #生成squid.conf配置文件
- :>/usr/local/squid3/etc/squid.conf
- cat >> /usr/local/squid3/etc/squid.conf << EOF
- visible_hostname www.example.com
- cache_mgr liyaoyi0317@163.com
- http_port 80 vhost vport
- cache_mem 256 MB
- maximum_object_size 20000 KB
- maximum_object_size_in_memory 4096 KB
- memory_replacement_policy lru
- cache_dir ufs /usr/local/squid3/var/cache 1000 16 256
- max_open_disk_fds 0
- cache_swap_low 80
- cache_swap_high 95
- error_directory /usr/local/squid3/share/errors/zh-cn
- logformat squid %ts.%3tu %tr %>a %Ss /%03<Hs %<st %rm %ru %un %Sh/$<A %mt
- access_log /usr/local/squid3/var/logs/access.log squid
- pid_filename /usr/local/squid3/var/logs/squid.pid
- cache_store_log none
- cache_peer 192.168.209.128 parent 80 0 no-query originserver round-robin name=web1
- cache_peer 192.168.209.254 parent 80 0 no-query originserver round-robin name=web2
- cache_peer_domain web1 www.example.com
- cache_peer_domain web2 www.example.com
- cache_peer_access web1 allow all
- cache_peer_access web2 allow all
- http_access allow all
- acl QUERY urlpath_regex .php .jsp .asp .pl .cgi
- cache deny QUERY
- cache_effective_user squid
- cache_effective_group squid
- EOF
- #配置环境变量
- cat >> /etc/profile << 'EOF'
- export PATH=$PATH:/usr/local/squid3/sbin
- EOF
- source /etc/profile
- #修改权限
- chown -R squid:squid /usr/local/squid3/var/cache
- chown -R squid:squid /usr/local/squid3/var/logs
- /usr/local/squid3/sbin/squid -z #创建缓存目录
- /usr/local/squid3/sbin/squid #启动服务
- #轮循日志
- echo "0 0 * * * /usr/local/squid3/sbin/squid -k rotate" >> /var/spool/cron/root
- #生成squid启动脚本
- cat >> /etc/init.d/squid << 'EOF'
- #!/bin/bash
- #chkconfig: 345 85 15
- #description: squid test
- #BY liyaoyi 2012-05-04
- . /etc/rc.d/init.d/functions
- squid="/usr/local/squid3/sbin/squid"
- prog="squid"
- RETVAL=0
- start() {
- echo -n $"Starting $prog: "
- daemon $squid -s
- RETVAL=$?
- echo
- return $RETVAL
- }
- stop () {
- echo -n $"Stoping $prog: "
- daemon $squid -k shutdown
- echo
- return $RETVAL
- }
- reload () {
- echo -n $"Reloading $prog: "
- daemon $squid -k reconfigure
- echo
- return $RETVAL
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- reload)
- reload
- ;;
- restart)
- stop
- start
- ;;
- *)
- echo $"Usage: $0 {start|stop|restart|reload}"
- RETVAL=1
- esac
- exit $RETVAL
- EOF
- chmod a+x /etc/init.d/squid
- chkconfig --add squid
- chkconfig squid on
- /etc/init.d/squid start
- echo ""
- echo "squid install OK..."
- echo ""
四、Squid调试中多个常用命令(注意squid命令路径)
1、原始化squid.conf 里配置的 cache 目录
#squid/sbin/squid -z
第一次启动squid服务时必须输入此命令,假如有错误提示,请检验你的 cache目录的权限。
2、对squid.conf 排错,即验证 squid.conf 的 语法和配置。
#squid/sbin/squid -k parse
假如 squid.conf 有语法或配置错误,这里会返回提示你,假如没有返回,恭喜,能够尝试启动squid。
3、在前台启动squid,并输出启动流程。
#squid/sbin/squid -N -d1
假如有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4、启动squid在后台运行。
#squid/sbin/squid -s
这时刻能够 ps -A 来查看系统进程,能够看到俩个 squid 进程。
5、停止 squid
#squid/sbin/squid -k shutdown
6、重新加载修改过的squid.conf
#squid/sbin/squid -k reconfigure
当你对squid.conf进行修改后,无须重启服务,使用这个命令,重新读取配置生效。
7、缓存命中率命令
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户
8、可以查看下命中率及其他相关信息
#/usr/local/squid3/bin/squidclient -p 80 -h localhost mgr:info
通过squidclient这个工具来查看squid的运行情况,缓存命中率等。
参考:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/index.html
http://baike.baidu.com/view/490519.htm
http://www.myhack58.com/Article/sort099/sort0102/2011/31175.htm