squid代理分为两种方式:
一、正向代理(用于企业办公环境,员工上网需要通过squid代理上网)
客户端发送请求到代理服务器,代理服务器去向真实服务器请求结果,并将结果返回给客户端。
二、反向代理(常用于网站静态项(图片、html、流媒体、js、css等)缓存服务器)
客户端发送请求,代理服务器从缓存中找结果返回,或向服务器请求到结果缓存一份以便下次使用,并将结果返回给客户端。
正向代理
1.安装squid服务
#yum install squid -y
2.查看版本
#squid -v
3.配置squid
#cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
vim /etc/squid/squid.conf
参考文档说明:https://blog.csdn.net/gengoo/article/details/5158238
#监听端口
http_port 3128
acl manager proto cache_object
(重点说明:该类型指URI访问(或传输)协议。有效值:http, https (same as HTTP/TLS), ftp, gopher, urn, whois, 和cache_object。cache_object机制是squid的特性。它用于访问squid的缓存管理接口。默认的squid.conf文件有许多行限制缓存管理访问。)
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 10.0.0.0/8 #RFC1918 possible internal network
acl localnet src 172.16.0.0/12 #RFC1918 possible internal network
acl localnet src 192.168.0.0/16 #RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
(说明:method ACL指HTTP请求方法,如:acl Uploads method PUT POST. Squid知道下列标准HTTP方法:GET, POST, PUT, HEAD, CONNECT, TRACE, OPTIONS和DELETE。另外,来自WEBDAV规范,RFC 2518的方法:PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK。还有非标准的WEBDAV方法: BMOVE, BDELETE, BPROPFIND。最后,你可以在extension_methods指令里配置squid去理解其他的请求方法。)
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
cache_dir aufs /data/cache 1024 16 256
cache_mem 128 MB
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
如果只是简单使用,配置很简单,以上就可以实现要求,如果需要更高级限制和缓存功能,请参考下边文档说明
/etc/squid/squid.conf 文件说明
#acl all src 0.0.0.0/0.0.0.0 and http_access allow all选项定义了一个访问控制列表。
#这里的访问控制列表允许所有对代理服务的访问,因为这里该代理是加速web服务器。
acl all src 0.0.0.0/0.0.0.0 #允许所有IP访问
acl manager proto http #manager url协议为http
acl localhost src 127.0.0.1/255.255.255.255 #允许本机IP
acl to_localhost dst 127.0.0.1 #允许目的地址为本机IP
acl Safe_ports port 80 #允许安全更新的端口为80
acl CONNECT method CONNECT #请求方法以CONNECT
http_access allow all #允许所有人使用该代理,因为这里是代理加速web服务器
http_reply_access allow all #允许所有客户端使用该代理
acl OverConnLimit maxconn 16 #限制每个IP最大允许16个连接,防止攻击
http_access deny OverConnLimit
icp_access deny all #禁止从邻居服务器缓冲内发送和接收ICP请求.
miss_access allow all #允许直接更新请求
ident_lookup_access deny all #禁止lookup检查DNS
http_port 8080 transparent #指定Squid监听浏览器客户请求的端口号。
hierarchy_stoplist cgi-bin ? #用来强制某些特定的对象不被缓存,主要是处于安全的目的。
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
cache_mem 1 GB #这是一个优化选项,增加该内存值有利于缓存。应该注意的是:#一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1G fqdncache_size 1024 #FQDN 高速缓存大小
maximum_object_size_in_memory 2 MB #允许最大的文件载入内存
memory_replacement_policy heap LFUDA #动态使用最小的,移出内存
cache
cache_replacement_policy heap LFUDA #动态使用最小的,移出硬盘
cache
cache_dir ufs /home/cache 5000 32 512 #高速缓存目录ufs类型使用的缓冲值最大允许1000MB空间,#32个一级目录,512个二级目录
max_open_disk_fds 0 #允许最大打开文件数量,0 无限制
minimum_object_size 1 KB #允许最小文件请求体大小
maximum_object_size 20 MB #允午最大文件请求体大小
cache_swap_low 90 #最小允许使用swap 90%
cache_swap_high 95 #最多允许使用swap 95%
ipcache_size 2048 # IP 地址高速缓存大小 2M
ipcache_low 90 #最小允许ipcache使用swap 90%
ipcache_high 95 #最大允许ipcache使用swap 90%
access_log /var/log/squid/access.log squid #定义日志存放记录
cache_log /var/log/squid/cache.log squid
cache_store_log none #禁止store日志
emulate_httpd_log on #将使Squid仿照Web服务器的格式创建访问记录。如果希望使用。Web访问记录分析程序,就需要设置这个参数。
refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims
ignore-reload #更新cache规则
acl buggy_server url_regex ^http://.... http:// #只允许http的请求
broken_posts allow buggy_server
acl apache rep_header Server ^Apache #允许apache的编码
broken_vary_encoding
allow apache request_entities off #禁止非http的标分准请求,防止攻击
header_access header allow all #允许所有的http报头
relaxed_header_parser on #不严格分析http报头.
client_lifetime 120 minute #最大客户连接时间 120分钟
cache_mgr sky@test.com #指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。
cache_effective_user squid #这里以用户squid的身份Squid服务器
cache_effective_group squid icp_port 0 #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号,这里设置为0是因为这里配置Squid为内部Web服务器的加速器,所以不需要使用邻居服务器的缓冲。0是禁用
#cache_peer 设置允许更新缓存的主机,因是本机所以127.0.0.1
cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange
cache_peer_domain 127.0.0.1
hostname_aliases 127.0.0.1
error_directory /usr/share/squid/errors/Simplify_Chinese #定义错误路径
always_direct allow all # cache丢失或不存在时允许所有请求直接转发到原始服务器
ignore_unknown_nameservers on #开反DNS查询,当域名地址不相同时候,禁止访问
coredump_dir /var/log/squid #定义dump的目录
max_filedesc 2048 #最大打开的文件描述
half_closed_clients off #使Squid在当read不再返回数据时立即关闭客户端的连接,有时read不再返回数据是由于某些客户关闭TCP的发送数据,而仍然保持接收数据。而Squid分辨不出TCP半关闭和完全关闭。
buffered_logs on #若打开选项“buffered_logs”可以稍稍提高加速某些对日志文件的写入,该选项主要是实现优化特性。
#防止天涯盗链,转嫁给百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info tianya
#阻止baidu蜘蛛
acl baidu req_header User-Agent Baiduspider
http_access deny baidu
#限制同一IP客户端的最大连接数
acl OverConnLimit maxconn 128
http_access deny OverConnLimit
#防止被人利用为HTTP代理,设置允许访问的IP地址
acl myip dst 222.18.63.37 http_access deny !myip
#允许本地管理
acl Manager proto cache_object
acl Localhost src 127.0.0.1 222.18.63.37
http_access allow Manager Localhost
cachemgr_passwd 53034338 all
http_access deny Manager
#仅仅允许80端口的代理
acl all src 0.0.0.0/0.0.0.0
acl Safe_ports port 80 # http
http_access deny !Safe_ports
http_access allow all
#Squid信息设置
visible_hostname happy.swjtu.edu.cn
cache_mgr ooopic2008@qq.com
#基本设置
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes
#2.6的反向代理加速配置
cache_peer 127.0.0.1 parent 80 0 no-query originserver
#错误文档
error_directory /usr/local/squid/share/errors/Simplify_Chinese
#单台使用,不使用该功能
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \? .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
cache_store_log none
pid_filename /usr/local/squid/var/logs/squid.pid
emulate_httpd_log on
上班时间禁止登陆某些网站可作如下设置:
acl banned_sites url_regex "/etc/squid/banned.list"
acl work-time time M 8:30-12:00
acl work-time time W 14:00-18:00
acl mmxfile urlpath_regex -i \.mp3$ \.avi$ \.rmv$ \.rm \.wma$ \.wmv$
http_access deny work-time mmxfile
http_acess deny work-time banned_sites
http_access allow localhost
限制网络连接数配置如下:
acl loc1 src 192.168.1.0/24
acl loc1_conn maxconn 50
acl loc2 src 192.168.2.0/24
acl loc2_conn maxconn 40
http_access deny loc1 loc1_conn
http_access deny loc2 loc2_conn
http_access allow localhost
http_access deny all
限制网络ip上网用户
acl inside1 src 192.168.1.0/24
acl inside2 src 192.168.2.0/24
acl localmac arp "/usr/local/squid/localmac" #此文件localmac书写格式,默认是一行一个物理地址。
http_access allow inside1 #允许inside1规则通过
http_access allow inside2 #允许inside2规则通过
http_access allow localmac #允许localmac里面有登记的mac地址通过 http_access allow msn #允许访问[url]http://gateway.messenger.hotmail.com[/url]
acl admin arp 00:40:05:13:C4:B2 http_access allow admin #允许00:40:05:13:C4:B2这个mac地址
限制每个客户端的并发连接数为20,但不限制整个公司的访问限制
client_db on
acl allow_clientIP src 192.168.0.0
acl OverConnLimit maxconn 20
http_access allow allow_clientIP OverConnLimit
http_access deny OverConnLImit
反向代理
1.编辑/etc/squid/squid.conf
#vim /etc/squid/squid.conf
http_port 80 accel vhost vport
#文件最末尾增加
cache_peer 123.125.119.147 parent 80 0 originserver name=a
cache_peer 61.135.169.125 parent 80 0 originserver name=b
cache_peer_domain a www.qq.com
cache_peer_domain b www.baidu.com
2.测试
#curl -xlocalhost:80 http://www.baidu.com/ -I
#curl -xlocalhost:80 http://www.qq.com/ -I
#curl -xlocalhost:80 http://www.sina.com/ -I
前两个网站可以正常访问,后一个不能访问,原因很简单,没有设置代理。