一 squid简介
squid是一个支持http、https、ftp等服务的web缓存代理软件,通过缓存页面实现降低宽带占用提高页面响应时间。另外,squid提供访问控制,squid的缓存页面存放在内存和硬盘中,在选择服务器时候内存和硬盘要求高,对于数据过期更新,需要不定期的清理缓存的数据。
二 squid 代码请求流程
1 客户端访问squid代理服务器
2 代理服务器代表客户端访问后端真实服务器
3 真实服务器把数据返回给squid代理服务器
4 代理服务器把响应数据发送给客户端,并把页面缓存在本地的内存及磁盘中
5 客户端再次请求相同数据时,代理服务器直接将缓存的数据返回给客户端
三 squid代理服务类型
一般分三种类型,正向代理服务器、透明代理服务器、反向代理服务器。
正向代理:主要应用于内部网络访问外部网络时缓存页面数据,提供统一网络接口链接到外网,所有的内网客户端无需配置外网ip即可通过squid上网,在这种模式下,squid主要负责提供缓存加速及访问控制的功能。代理结构如下图
透明代理:与正向代理类似,不需要终端用户进行特殊设置,需要结合网关部署,所有操作均由管理员在网关服务器和代理服务器进行设置,这些对于用户透明的。代理结构如下图
反向代理:反向代理结合智能DNS可以实现基本的CDN框架,此时的squid代理服务器可以直接代表后端真实服务器提供页面访问,用户并感觉不到自己是在访问代理服务器,有利于减轻真实服务器压力,提高并发和响应速度。
四 配置文件解析
使用yum安装squid时,默认的配置文件是/etc/squid/squid.conf. 下表给出详细解读
配置选项 | 具体描述 |
http_port | 设置监听的网络端口,默认是3128 |
cache_dir | 设置缓存位置及大小,可以使用多个cache_dir设置多个存储位置 cache_dir ufs /home/data/squid/cache 100 16 256 100代表百兆存储容量,16及256代表子目录个数 |
access_log | 设置日志路径和格式,access_log /var/log/squid/access.log combined |
acl | 定义控制访问列表对象,可以控制原地址端口时间 |
http_access | 访问控制,允许使用acl定义localnat http_access allow localnat |
visible_hostname | 设置主机名,默认squid将默认检测主机名 |
cache_peer | 用来设置可以连接的其他代理服务器 格式:cache_peer hostname type http-port icp-port[option] hostname为其他代理机器的主机名或ip type类型可为parent sibling multicast http_port指定端口号 icp-port指定ICP端口号 option选项可选值如下: proxy-only实现不缓存邻居的任何响应 weight=n设置服务器权重 ttl=n此值对广播邻居有效 rounf-robin设置轮询 max-conn=n设置链接邻居cache的并发量 originserver设置邻居为源真是服务器,做反向代理使用 |
五 实例squid反向代理
squid一般缓存静态页面,网页、图片、歌曲,默认不缓存CGI脚本。
服务器名称 | 网络配置 |
squid.test.com | eth0:10.10.10.10 |
eth1:192.168.1.2 | |
web1.test.com | eth0:192.168.1.3 |
web2.test.com | eth0:192.168.1.4 |
1 代理服务器squid设置
首先配置网络环境
网卡eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONBOOT=yes
TYPE=Ethernet
网卡eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
执行 service network restart
安装squid代理服务并修改配置文件
yum install -y squid
vim /etc/squid/squid.conf
acl manager proto cache_object #定义缓存管理ACL
acl localhost src 127.0.0.1/32 ::1 #定义源地址为本地回环地址的ACL
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 #定义目标地址的ACL
acl localnet src 10.0.0.0/8 #定义源地址为10.0.0.0/8的ACL
acl localnet src 172.16.0.0/12 #定义源地址ACL
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
acl SSL_ports port 443 #定义安全端口为443的ACL
acl Safe_ports port 80 #定义安全端口为80的ACL
acl Safe_ports port 21 #定义安全端口为21的ACL
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT #定义连接方式为CONNECT的ACL
http_access allow manager localhost #仅允许本机主机进行缓存管理
http_access deny manager #拒绝其他主机的所有缓存管理
#拒绝所有非Safe_ports的链接
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
visible_hostname squid.test.com #设置主机名
cache_mem 2048 MB #内存缓存总容量
maximum_object_size_in_memory 4096KB #内存缓存单个文件最大4M
maximum_object_size 4096KB #磁盘缓存单个文件最大4M
cache_dir ufs /var/spool/squid 800 16 256 #硬盘缓存目录 最大800M 16个一级目录 256个二级目录
error_directory /usr/share/squid/errors/zh-cn #定义报错文件的存放目录
cache_log /var/log/squid/cache.log #缓存日志文件
cahce_mgr admin@test.com #管理员邮箱
http_port 80 accel vhost
http_port 3128
##no-query表示禁止使用ICP对源服务器进行查询
##设置ICP端口为0
##round-robin可以让代理轮询多台源服务器
##weight=n指定源服务器权重
##name用来设置服务器的唯一名称,代理转发数据到相同主机的不同端口非常有用
##originserver模拟本机服务器为源服务器
cache_peer 192.168.1.3 parent 80 0 no-query originserver round-robin name=server1
cache_peer 192.168.1.4 parent 80 0 no-query originserver round-robin name=server1
hierarchy_stoplist cgi-bin ? #禁止缓存CGI脚本
##refresh_pattern 检查数据是否过期 min max 是最小最大分钟 -i是不区分大小写
##格式:refresh_pattern [-i] regexp min percent max [option]
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
执行service iptables stop
service squid start
chkconfig squid on
2 两台web服务器设置
设置web1网络参数
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
service network restart
service iptables stop
chkconfig iptables off
yum install -y httpd
echo "web1 192.168.1.3" > /var/www/html/index.html
service httpd start
chkconfig httpd on
web2上同样执行上面步骤,注意修改部分参数
3 客户端验证
浏览器访问代理服务器,http://10.10.10.10 多次刷新后会得到轮询的不同网页
本文转自super李导51CTO博客,原文链接: http://blog.51cto.com/superleedo/1895100,如需转载请自行联系原作者