一、squid简介
Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。
Squid是一个缓存internet数据的软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。
Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。
二、规划
Squid服务器:
eth0:192.168.10.135
eth1:10.10.10.10
Web服务器1:192.168.10.132
Web服务器2:192.168.10.133
客户端主机:10.10.10.111
注:已关闭SELinux和firewalld。
三、安装相关依赖并编译squid
①下载安装相关依赖
# yum -y install perl perl-Digest perl-Digest-MD5 libecap libtool-ltdl-devel perl-Compress* perl-DBI gcc gcc-c++ net-snmp net-snmp-utils # wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.12.tar.gz # groupadd -g 23 squid ##创建群组 # useradd -s /sbin/nologin -g squid -u 23 squid -d /var/spool/squid
②编译squid
# tar -zxvf squid-3.5.12.tar.gz # cd squid-3.5.12 # ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-gnuregex --enable-icmp --enable-snmp --enable-default-err-language="Simplify_Chinese" --enable-kill-parent-hack --enable-cache-digests --enable-underscore --enable-poll --enable-async-io=240 --enable-arp-acl --enable-delay-pools --enable-follow-x-forwarded-for --with-large-files --with-default-user=squid # make # make install
编译项简单释义:
--prefix=/usr/local/squid:指定软件安装位置 --sysconfdir=/etc:指定配置文件安装路径 --enable-gnuregex:支持GNU正则表达式 --enable-icmp:支持icmp --enable-snmp:支持snmp,此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测 --enable-default-err-language="Simplify_Chinese" :指定出错时显示的错误页面为简体中文 --enable-kill-parent-hack:关闭squid时,连同其父进程一起关闭 --enable-cache-digests:加快请求时,检索缓存内容速度 --enable-underscore:允许解析的URL中出现下划线(squid默认带下划线的URL非法并拒绝访问) --enable-poll:指定使用poll()函数 --enable-async-io=240:异步I/O,用以提升存储性能 --enable-arp-acl:可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗 --enable-delay-pools:开启squid延时池功能。延时池是squid用于传输形状或带宽限制的技术。 该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能 会被人工延迟 --enable-follow-x-forwarded-for:当一个请求被另一些代理服务器转发时通过从http头中寻找X-Forwarded-For来发现直接或间接的客户端IP地址 --with-large-files:开启大文件支持 --with-default-user=squid:设置默认用户
四、配置squid实现反向代理
①新建squid cache目录
# cp /usr/local/squid/sbin/squid /etc/init.d/ ##复制启动文件 # mkdir /data/{cache,logs} ##新建squid cache目录 # chown -R squid.squid /data/
②配置squid.conf
# vi /etc/squid.conf ##############配置squid服务器用户和组############ cache_effective_user squid cache_effective_group squid ###########配置squid服务器主机名及管理员邮箱##### visible_hostname squid cache_mgr zhi@qq.com #############配置squid为加速模式################# http_port 80 accel vhost vport ##指定squid监听http请求的端口并设定为accel加速模式 #icp_port 3130 ##3130(UDP)负责与邻近Proxy互相沟通彼此的cache数据库 ##############配置squid父节点############# ######cache_peer语法:cache_peer [上层proxy主机名] [proxy角色] [proxy port] [icp port] [额外参数] ####proxy角色:parent(上层)、sibling(邻居proxy) ####额外参数:no-query---向上层Proxy请求数据时,可不需发送icp包,以降低主机的负担; ####proxy-only---向上层proxy请求数据时不缓存至本地的proxy服务器内,降低本地proxy负担; #####originserver参数指明是源服务器; #######round-robin参数指明squid通过轮询分发请求至父节点;wieght=n:权重 #cache_peer 192.168.10.132 parent 80 0 no-query originserver round-robin name=node1 #cache_peer 192.168.10.133 parent 80 0 no-query originserver round-robin name=node2 cache_peer 192.168.10.132 parent 80 0 originserver round-robin weight=1 cache_peer 192.168.10.133 parent 80 0 originserver round-robin weight=1 ###########配置不同域名转发到不同的cache_peer上##### ####语法:cache_peer_domain [上层proxy主机名] [所请求域名] cache_peer_domain node1 node1.zhi.com cache_peer_domain node2 node2.zhi.com ###########访问控制、日志和缓存目录设置########### acl localnet src 192.168.10.135 acl all src 0.0.0.0/0.0.0.0 http_access allow all ##全部放行 icp_access allow localnet cache_log /data/logs/cache.log ##设置缓存日志文件 access_log /data/logs/access.log squid ##设置访问日志文件 cache_dir ufs /data/cache/ 1000 16 256 ##设置cache目录、数据存储格式、为缓存目录 ##分配的磁盘空间(MB)、cache一级子目录个数、cache二级子目录个数 ############对squid的一些优化##################### maximum_object_size 10240 KB ##能缓存的最大对象为10M maximum_object_size_in_memory 512 KB ##内存中缓存的最大对象512K cache_mem 256 MB ##squid用于缓存的内存量
③验证配置并启动squid
# /usr/local/squid/sbin/squid -k parse ##验证语法和配置 # /usr/local/squid/sbin/squid -z ##初始化缓存空间 # systemctl start squid # systemctl status squid
五、配置后端Web服务器
WEB1:
# vi /etc/httpd/conf/httpd.conf ServerName node1.zhi.com:80 # echo "<h1>squid in 192.168.10.132</h1>" > /var/www/html/index.html # systemctl start httpd
WEB2:
# vi /etc/httpd/conf/httpd.conf ServerName node1.zhi.com:80 # echo "<h1>squid in 192.168.10.133</h1>" > /var/www/html/index.html # systemctl start httpd
客户端主机:
# cat /etc/hosts 10.10.10.10 node1.zhi.com 10.10.10.10 node2.zhi.com 10.10.10.10 www.baidu.com
六、测试
①测试
在客户端浏览器输入node1.zhi.com查看
在客户端浏览器输入node2.zhi.com查看
在客户端浏览器输入www.baidu.com查看
由于squid cache服务器没有www.baidu.com缓存或代理,所以提示了错误并显示了管理员地址
②查看log
查看squid服务器log
查看Web1的log
查看Web2的log
至此,一个简单的squid cache反向代理就搭建好了。
本文出自 “记事本” 博客,请务必保留此出处http://wangzhijian.blog.51cto.com/6427016/1742666
原文:http://wangzhijian.blog.51cto.com/6427016/1742666