zoukankan      html  css  js  c++  java
  • 【转合辑】squid的安装配置

    Squid-Linux下的使用详解
    本文出自: http://www.topcmm.com/ (2001-06-26 17:04:00)

    做为眼下最流行的操作系统,Linux已经越来越受到世人的关注。虽然目前Linux的软件还不是很丰富,
    替代WINDOWS作为普通PC机操作系统还为时过早,但是在服务器领域,Linux的稳定性,可操作性决不
    输于任何操作系统,并且也有优秀的软件支持。Squid就是其中之一。Linux加Squid的组合做为代理
    服务器,性能远远超过WINNT加MSPROXY2.0(个人观点),为几百人的小型局域网代理绰绰有余。下
    面,我就详细的介绍Squid的安装及使用技巧,希望大家能够喜欢上它。

    1.Squid简介

      Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。
    也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid
    连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面
    时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid 可以代理HTTP, FTP,
    GOPHER, SSL 和 WAIS 协议,暂不能代理POP, NNTP等协议。不过,已经有人开始修改Squid,相信不
    久的将来,Squid能够代理这些协议。

      Squid能够缓存任何数据吗?不是的。象缓存信用卡帐号、可以远方执行的scripts、经常变换的
    主页等是不合适的也是不安全的。Squid可以自动的进行处理,你也可以根据自己的需要设置Squid,
    使之过滤掉你不想要的东西。

      Squid可以工作在很多的操作系统中,如AIX, Digital Unix, FreeBSD, HP-UX, Irix, Linux,
    NetBSD, Nextstep, SCO, Solaris,OS/2等,也有不少人在其他操作系统中重新编译过Squid。

      Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI
    硬盘,处理器要求不高,400MH以上既可。

    2. Squid的编译和运行

      其实现在的Linux发行套件中基本都有已经编译好的Squid,你所作的就是安装它既可。如果你手头
    没有现成的编译好的Squid或想使用最新的版本,去ftp:squid.nlanr.net下载一份,自己编译。

      Squid的编译是非常简单的,因为它基本上是自己配置自己。最容易出现的问题是你的系统上没有
    合适的编译器,这可以通过安装相应的编译器解决。如果出现其他问题,你可以问一下有经验的用户或
    到相应的邮件列表寻找帮助。

      编译Squid之前,最好建一个专门运行Squid的用户和组。我就在自己的服务器上建了一个名为
    squid的用户和组,用户目录设为/usr/local/squid。然后su为用户squid并从squid.nlanr.net下载
    Squid的源文件到目录 /usr/local/squid/src中,用如下命令进行解压:

      %tar xzf squid-2.0.RELEASE-src.tar.gz

      %cd /usr/local/squid/src/ squid-*.*.RELEASE /

      %./configure

      %make

      %make install

      第一个命令在目录/usr/local/squid/src中产生一个新的子目录/squid-*.*.RELEASE/。命令
    ./configure会自动查询你的系统配置情况以及你系统中使用的头文件。不加参数的./configure会
    把Squid安装在目录/usr/local/squid中,如果你想使用其他目录,用如下命令
    ./configure --prefix=/some/other/directory,这会把Squid安装在目录/some/other/directory中。
    make命令编译Squid,make install命令安装Squid。

      不出意外的话,目录/usr/local/squid中会出现如下目录:

      /bin

      /cache

      /etc

      /logs/

      /src (自己创建的)

      目录/bin中含有Squid可执行程序,包括Squid本身,ftpget等。

      目录/cache包含Squid缓存的数据,其中包含象/00/ /01/ /02/ 以及/03/这样的目录,这些目录
    中还有子目录,因为目录多了比在一个目录成千上万的文件中寻找一个文件更容易,速度更快。

      目录/etc中包含Squid的唯一的配置文件squid.conf。

      目录/logs中包含Squid的日志。


    3. squid.conf文件的配置

      在安装Squid后,在目录/usr/local/squid /etc中会自动产生一个样本squid.conf文件,文件中
    对每一个选项都有详细的说明,用户可以通过修改该文件以满足不同的需要。

      总的来说,有如下几个重要选项:

      ·http_port:设定Squid监听的端口,你最好设一个比较好记的端口号,以便在进行客户机配置
    时容易记住。我的机器上端口号设的是8080。缺省为3128。

      ·cache_mem:设定Squid占用的物理内存,根据我的经验,cache_mem的大小不应超过你的服务
    器物理内存的三分之一,否则将会影响机器的总体性能。

      ·maximum_object_size:设定Squid可以接收的最大对象的大小。Squid缺省值为4M,我自己入
    认为太大,你可以根据自己的需要进行设定。

      ·cache_dir:设定缓存的位置、大小。一般看起来形式如下
    “cache_dir /usr/local/squid/cache 100 16 256”。 /usr/local/squid/cache代表缓存的位置;
    100代表缓存最大为100M;16和256代表一级和二级目录数。

      ·cache_effective_user:设定使用缓存的有效用户。缺省为用户nobody,如果你的系统中没
    有用户nobody,最好建一个或以非root用户运行Squid。

      下面我给出一个最简单的squid.conf文件:

      #squid.conf - a very basic config file for squid

      #Turn logging to it's lowest level

      debug_options ALL,1

      #defines a group (or Access Control List) that includes all IP addresses

      acl all src 0.0.0.0/0.0.0.0

      #define RAM used

      cache_mem 32M

      #defines the cache size

      cache_dir /usr/local/squid/cache 100 16 256

      #allow all sites to use connect to us via HTTP

      http_access allow all

      #allow all sites to use us as a sibling

      icp_access allow all

      #test the following sites to check that we are connected

      dns_testnames internic.net usc.edu cs.colorado.edu mit.edu yale.edu

      #run as the squid user

      cache_effective_user squid squid

      这个配置文件允许所有人使用Squid,创建了100M缓存,使用32M内存,在缺省位置
    "/usr/local/squid/cache"缓存数据,所有缓存数据以组squid和用户squid身份保存,端口为3128。
    虽然这个配置很不安全,但是它已经能使用了。


    4. 运行Squid

      首先以root身份登陆。运行如下命令:

      %/usr/local/squid/bin/squid –z

      该命令会产生Squid所有的缓存目录。

      如果你想前台执行Squid,接着执行命令:

      %/usr/local/squid/bin/squid -NCd1

      该命令正式启动Squid。如果一切正常,你会看到一行输出

      Ready to serve requests.

      如果想后台运行Squid,把它做为一个精灵进程,执行命令:

      %/usr/local/squid/bin/squid

      观察Squid是否运行使用命令:

      % squid -k check

      输出会告诉你Squid的当前状态。


    squid安装配置

     操作系统: Redhat 9.0,内核:2.4.20-31.9,其他系统套件已经通过apt更新到最新了
      
      1.编译安装Squid
      
      由于Squid对系统硬件要求比较高,所以我们安装的时候应尽量优化。
      
      #groupadd squid
      #useradd squid
      
      添加suqid用户和用户组
      
      #export CFLAGES='-O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2'
      可以根据你的CPU选择相应的参数
      GCC-3.1以上可針對CPU最佳化:
      
      Pentium2: -O2 -mcpu=i686 -march=i686 -mmmx
      Pentium3: -O2 -mcpu=pentium3 -march=pentium3 -mmmx -msse
      Pentium4: -O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2
      
      #./configure --prefix=/usr/local/squid --enable-gnuregex --enable-async-io=80 --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cahce-digests --enable-arp-acl --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese" --enable-poll --enable-linux-netfilter --enable-underscore
      
      #make
      #make install
      
      
      我个人安装软件都比较喜欢用源码包自己编译,觉得这样知道你自己在做什么,用rpm包好像不知道做什么的就安装好了。下面我们对各个编译参数进行解释,当然你可以通过./configure --help来查看其他的参数,以及各个参数的英文解释。
      
      --prefix=/usr/local/squid :指定软件的安装路径
      --enable-gnuregex :由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理。
      --enable-async-io=80 :这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs
      --enable-icmp :加入icmp支持
      --enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦
      --enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。
      --disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。
      --enable-cahce-digests :加快请求时,检索缓存内容的速度。
      --enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
      --enable-err-language="Simplify_Chinese" 和
      --enable-default-err-languages="Simplify_Chinese" :指定出错是显示的错误页面为简体中文
      --enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。
      --enable-linux-netfilter :可以支持透明代理
      --enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。
      
      这里我们就安装好了,接下来就是修改配置文件了。
      
      
      2.修改定义配置参数
      下面是我的squid.conf文件
      
      
      # NETWORK OPTIONS(有关的网络选项)
      # ----------------------------------------------------------
      http_port 3128 #代理端口
      icp_port 3130 #icp端口
      
      # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)
      #-----------------------------------------------------------
      #禁止缓存
      hierarchy_stoplist cgi-bin ?
      hierarchy_stoplist -i ^https:\ ?
      acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
      acl denyssl urlpath_regex -i ^https:\
      no_cache deny QUERY
      no_cache deny denyssl
      #上面几个就是说遇到URL中有包含cgi-bin和以https:\开头的都不要缓存,
      #还有asp、cgi、php等动态脚本也不要缓存,
      #因为这些脚本通常都是动态更新的,这样数据不同步。
      #还有https://开通的不缓存是因为一般我们进行电子商务交易,
      #例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。
      
      
      # OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的选项)
      # ----------------------------------------------------------
      
      cache_mem 8 MB #额外使用内存量,可根据你的系统内存在设定,一般为实际内存的1/3
      
      cache_swap_low 90 #最低缓存百分比
      cache_swap_high 95 ##最高缓存百分比,就是上面那个额外内存的使用百分比
      
      maximum_object_size 4096 KB #单个文件最大缓存大小,超过这个大小将不缓存
      
      maximum_object_size_in_memory 8 KB #在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中
      
      #有DNS正反解所得到的IP存在缓存区的大小,这样可以加快解析速度
      ipcache_size 1024
      ipcache_low 90
      ipcache_high 95
      fqdncache_size 1024
      
      
      # LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)
      # -----------------------------------------------------------------------------
      
      # <目录所在>
      #那个 aufs 只有在编译的时候加入 --enable-async-io 那个选项才有支持,
      #至于目录所在地与所占用的磁盘大小则请视您的主机情况而定,
      #而后面 dir1, dir2 则是两个次目录的大小,通常 16 256 或 64 64 皆可,
      #一般来说,数字最好是 16 的倍数,据说性能会比较好啦!
      
      cache_dir aufs /Cache1 100 16 256
      cache_dir aufs /Cache2 100 16 256
      
      #日志存放位置
      cache_access_log /usr/local/squid/var/logs/access.log
      cache_log /usr/local/squid/var/logs/cache.log
      
      # TAG: cache_store_log
      cache_store_log /usr/local/squid/var/logs/store.log
      
      # TAG: pid_filename
      pid_filename /usr/local/squid/var/logs/squid.pid
      # OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项)
      # ----------------------------------------------------------
      
      #用代理登陆匿名ftp服务选项
      # TAG: ftp_user
      ftp_user Squid@ #用户名
      ftp_passive on #被动模式
      
      #认证
      #auth_param basic children 5
      #auth_param basic realm Squid proxy-caching web server
      #auth_param basic credentialsttl 2 hours
      #auth_param basic casesensitive off
      
      # OPTIONS FOR TUNING THE CACHE(调整cache的选项)
      # ----------------------------------------------------------
      
      # TAG: refresh_pattern Cache更新时间设置
      # <最小时间> <百分比> <最大时间>
      
      refresh_pattern ^ftp: 1440 20% 10080
      refresh_pattern ^gopher: 1440 0% 1440
      refresh_pattern . 0 20% 4320
      
      #上面第一行如果网址开头是ftp的话,那么在一天(1440分钟)后,
      #如果proxy 再次取用这个档案时,则cache内的数据会被更新!
      
      # TIMEOUTS (超时)
      # ----------------------------------------------------------#连接到其他机器的最大尝试时间
      connect_timeout 1 minute
      
      #连接到上层代理的超时时间
      peer_connect_timeout 30 seconds
      
      #返回超时
      request_timeout 2 minutes
      
      #持续连接时间
      persistent_request_timeout 1 minute
      
      
      # ACCESS CONTROLS(访问控制)
      # ----------------------------------------------------------
      # TAG: acl
      #Examples:
      #acl myexample dst_as 1241
      #acl password proxy_auth REQUIRED
      #acl fileupload req_mime_type -i ^multipart/form-data$
      #acl javascript rep_mime_type -i ^application/x-javascript$
      #
      #Recommended minimum configuration:
      acl all src 0.0.0.0/0.0.0.0
      acl manager proto cache_object
      acl localhost src 127.0.0.1/255.255.255.255
      acl to_localhost dst 127.0.0.0/8
      acl SSL_ports port 443 563
      acl Safe_ports port 80 # http
      acl Safe_ports port 21 # ftp
      acl Safe_ports port 443 563 # https, snews
      acl Safe_ports port 70 # gopher
      acl Safe_ports port 210 # wais
      acl Safe_ports port 1025-65535 # unregistered ports
      acl Safe_ports port 280 # http-mgmt
      acl Safe_ports port 488 # gss-http
      acl Safe_ports port 591 # filemaker
      acl Safe_ports port 777 # multiling http
      acl CONNECT method CONNECT
      
  • 相关阅读:
    jquery validate使用总结
    javascript 学习笔记
    jquery easyui 学习总结
    javascript模式及javascript学习终极篇
    javascript学习笔记基础
    javascript学习笔记常见问题及技巧
    一道ITAT的题(C语言实现)
    JAVA实现约瑟夫算法
    JAXWS例子
    practical java笔记(实践1~5)
  • 原文地址:https://www.cnblogs.com/pony/p/1550834.html
Copyright © 2011-2022 走看看