设为首页 收藏本站
查看: 976|回复: 0

[经验分享] squid原理和配置

[复制链接]

尚未签到

发表于 2018-12-26 07:51:20 | 显示全部楼层 |阅读模式
  
            squid原理和配置






  • 介绍

web服务器的前端架设一台代理服务器,此代理服务器可以接受用户浏览器发出的请求,然后根据请求到web服务器上取得相应的数据并传送给客户浏览器。这种代理服务器就是反向代理服务器,常用的反向代理服务器软件有squidvarnishningx。这里主要介绍squidSquid可以实现正向代理、反向代理、缓存服务器等功能。
      squid可以通过ACL访问控制访问控制来限制用户的访问时间、访问站点等,从而控制网络访问,通过缓存可以提高访问速度;可以阻止特定的网络连接来减少一些非法连接,阻止内部主机访问非法站点或不适宜的站点,从而提高网络安全。当用户请求到达时,首先到达squid服务器,squid会查看访问控制列表中的访问规则,如果符合规则,squid会去缓存中查找数据,缓存中如果没有用户请求的数据,squid会根据用户请求去后端获取网页数据,然后将数据发送给用户,同时会在自己的缓存中保存一份,当下次别的用户请求这一数据时,squid直接将缓存中的数据发送给客户端,从而提高访问速度。Squid还可以缓存DNS查询结果,支持非模块化的DNS查询,对失败的请求进行消极缓存。
      squid在作为缓存服务器时,是从磁盘上读取缓存数据,和vanish相比,速度有些慢,因为vanish的缓存数据是从内存中读取的。但是vanish一旦崩溃,重启后存储在内存中数据会丢失,而squid不会有此问题。

  

  


  •   准备
  需要安装gcc编译工具、make编译器、开发包组、开发工具。
  squid在高负载时需要消耗大量内存资源,要为系统配置更高的文件描述符,根据具体情况指定文件描述符:

  
[root@localhost ~]# ulimit -Hn 65535
[root@localhost ~]# echo "ulimit -Hn 65535" >> /etc/rc.local      下载源码包,这里使用的是squid-3.3.5.tar.bz2
       环境如下:   
[root@ASANGE ~]# uname -r
2.6.32-358.el6.x86_64
[root@ASANGE ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)  

  


  •   安装
        
[root@ASANGE ~]# tar xfv squid-3.3.5.tar.bz2 -C /opt/
[root@ASANGE ~]# cd /opt/squid-3.3.5/
[root@ASANGE squid-3.3.5]# ./configure --prefix=/opt/squid --enable-dlmalloc --enable-icmp --enable-htcp --enable-poll --disable-ipv6 --enable-large-files –enable-linu-netfilter
....
[root@ASANGE squid-3.3.5]# make
[root@ASANGE squid-3.3.5]# make install
[root@ASANGE squid-3.3.5]# make install-pinger
//如果启用了—enable-icmp选项,必须以root身份安装pingwer程序
**********************************************************************
configure常用选项有:
--prefix=PREFIX     //安装目录
--localstatedir=DIR //该选项可以改变var目录的安装位置,var是实际磁盘上cache的默认位置,可以在主配置文件中修改此路径。
Sysconfdir=DIR      //etc目录位置
Squid专有选项:
--enable-dlmalloc[=LIB]     //在一些系统上内建的内存分配机制(malloc)在使用squid时表现一般。使用次参数将squid源码包中的dlmalloc包编译和连接进来。加入系统中已经安装dlmallc,可以使用=LIB来指定库的路径。
--enable-carp       //cache数组路由协议crap,用来转发丢失的cache到父cache的数组或cluster。
--enable-async-io[=N_THREADS]   //启用异步I/O,=N_THREADS参数改变squid使用的线程数量
--enable-icmp       //启用ICMP的ping功能
--enable-htcp       //启用超文本缓存协议
--enable-arp-acl    //支持arp地址访问控制列表
--enable-poll   //unix中提供两个相似的函数用以在I/O事件里扫描开放文件描述符:select()和poll()。
--disable-ipv6      //禁用ipv6
--with-large-files  //支持大文件,包括文件、日志等
–enable-linu-netfilter  //支持linux中的netfilter  

    Squid安装之后会生成多个目录,bin目录包含squid的可执行程序;cache目录包含squid缓存的数据,该缓存目录是层次型结构,可以加快缓存文件的寻找,从而加快速度;etc目录包含配置文件;logs目录包含日志信息。
    [root@ASANGE squid-3.3.5]# cd /opt/squid
[root@ASANGE squid]# ls
bin  etc  include  lib  libexec  sbin  share  var
  
  

  


  •   主配置文件
  主配置文件是/opt/squid/etc/squid.conf,其中的关键选项如下:

     
http_port 3128
//squid在哪个端口侦听http请求,默认是3128。可以通过多行设置多个端口。
//    日志文件路径:日志存放在/opt/squid/var/logs目录下,squid有三个主要日志文件:cache.log,access.log,store.log。
//    Cache.log包含状态和调试信息,可以在主配置文件中指定:
cache_log /opt/squid/var/logs/cache.log
//    Access.log包含对squid发起的每个请求的单一行。每行约150个字节。如果有一百万客户请求,它的大小约为150M。
cache_access_log /opt/squid/var/logs/access.log
//    Store.log包含进入和离开缓存的每个目标的记录。平均记录大小为175-200字节。但是squid不在store.log里对cache点创建接口,所以比access.log包含的记录少。
cache_store_log /opt/squid/var/logs/store.log
//如果路径值为none,会禁止store.log
cache_dir ufs /opt/squid/var/cache/squid 100 16 256     //指定缓存文件夹。其中ufs是存储机制;缓存文件的存放位置,大小为100M,一般应设置大一些;16和256表示在cache目录中创建一级目录和二级目录的个数。
maximum_object_size SIZE    //缓存文件的最大值,大于此值的响应不会被缓存在磁盘。
cache_replacement_policy lru|gdsf|lfuda     //磁盘cache的置换策略,默认使用lrc:最近最少使用。  

  
        主配置文件中最重要的是acl访问控制语句,用户可以自己定义acl来对客户请求做限制  :  
    Squid默认拒绝所有客户请求,可以通过在主配置文件中定义访问控制规则来允许客户请求。先定义一个针对客户的ACL,然后在对此ACL定义访问规则。
ACL元素语法如下:
Acl name type value1 value2 …
例如:acl workstation src 10.0.0.1/16
在ACL中有许多类型(type),下面介绍一些常用项:
1:IP地址
使用type:src,dst
它们的值可以是ip地址、ip和子网掩码、ip段
2:域名
使用type:srcdomain,dstdomain,cache_host_domain
它们的值是:域名
3:用户名:
使用type:ident,proxy_auth
它们的值是用户名。
4:正则表达式:
使用type:srcdom_regex,dstdom_regex,url_regex,urlpath_regex等
它们的值是一些正则表达式表示的地址或文件。(加 –I 参数表示不区分大小写)
例如:acl AAA url_regex –I ^http://www.bai
5:tcp端口号:
使用type:port,myport
它们的值是端口号或端口范围
例如:acl APORT port 1-500
6:时间
使用type:time
它的值每天中具体的时间,和每周中每天。日期用单字母表示,时间以24小时制表示,开始时间小于结束时间。
S Sunday
M Monday
T Tuesday
W Wednesday
H thersday
F firday
A satusday
D all weekdays(M-F)
例如:acl w-hour time D 08:00-17:30
访问控制规则:
http_access allow|deny ACLNAME
如拒绝使用IP地址的请求
Acl useip dstdomain_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$
http_access deny useip  
  


  •   常用命令
  

       查看配置文件是否正确:      
[root@ASANGE ~]# /opt/squid/sbin/squid -k check          
      初始化cache目录      
[root@ASANGE ~]# Squid–z     
      squid作为服务器进程运行:        
[root@ASANGE ~]# Squid–s  

      如果开机启动squid须执行一下命令:      
[root@ASANGE ~]# Echo“squid -s” >> /etc/rc.local  

      停止squid      
[root@ASANGE ~]# Squid–k shutdown  
  

  


  •   代理实现

      当配置squid作为正向代理服务器时,通过acl定义代理的客户端,符合acl规则的客户端可以通过squid服务器访问别的网站。1:客户端需配置代理指向squid服务器,端口为squid运行端口。2:当实现透明代理使客户端不需要配置代理和端口,而squid需借助iptables实现透明代理。例如:
  Iptables –t nat –A PREROUTING –I eth0 –p tcp–ddport 80 –j REDIRECT –to-port 3128
  

      当使用squid作为反向代理时,需要修改主配置文件squid.conf,添加一些关于主机的定义:
      例如:
        
http_port115.239.210.26:80 vhost            //修改http_port内容为外网地址和端口,
cache_peer192.168.0.3 parent 80 0 originserver weight=1 max-conn=1000
cache_peer192.168.0.6 parent 80 0 originserver weight=2 max-conn=1000
cache_peer192.168.0.9 parent 80 0 originserver weight=3 max-conn=1000        //定义多台,负载均衡   
      各个参数的意义如下:
          格式:cache_peer web服务器地址服务类型 http端口 icp端口 [可选项]
          其中服务类型有parent(父),sibling(兄弟),multicast(多播)
          Max_conn定义可以打开多少个连接
      此时如果外网用户访问我们的web服务器115.239.210.2680端口时,用户请求会被反向代理至192.168.0.3/6/9中的一台机器上,而且是根据各个服务器的权重进行分配。可以通过access.log查看是反问的具体是那台服务器。当同一请求再次到达squid服务器时,会直接从缓存中返回数据,从而加速访问。当后端服务器撒谎能够的数据发生改变时,用户请求到达squid服务器,squid会到后端查看数据是否发生改变,如果没有改变,后端服务器会返回一个304代码给squid服务器,squid服务器将缓存中的数据发送给用户;如果改变了,会从新从后端服务器获取数据并缓存,同时将新数据发送给用户,而这些都是通过http首部中一个Last-modified和If-Modified-Since的报头实现,让客户端能够获得最新的资源。
  


  

  

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655870-1-1.html 上篇帖子: squid ldap认证(AD) 下篇帖子: C5
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表