squid原理和配置

           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 �Cenable-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  //支持大文件,包括文件、日志等
�Cenable-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等
                它们的值是一些正则表达式表示的地址或文件。(加 �CI 参数表示不区分大小写)
例如:acl AAA url_regex �CI ^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�Cz

 

   squid作为服务器进程运行:        

[root@ASANGE ~]# Squid�Cs


   如果开机启动squid须执行一下命令:      

[root@ASANGE ~]# Echo“squid -s” >> /etc/rc.local


   停止squid      

[root@ASANGE ~]# Squid�Ck shutdown



  • 代理实现
         

   当配置squid作为正向代理服务器时,通过acl定义代理的客户端,符合acl规则的客户端可以通过squid服务器访问别的网站。1:客户端需配置代理指向squid服务器,端口为squid运行端口。2:当实现透明代理使客户端不需要配置代理和端口,而squid需借助iptables实现透明代理。例如:

Iptables �Ct nat �CA PREROUTING �CI eth0 �Cp tcp�Cddport 80 �Cj REDIRECT �Cto-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的报头实现,让客户端能够获得最新的资源。








你可能感兴趣的:(代理服务器,squid,VCL)