Squid工作原理

Squid是Linux下一个缓存Internet数据的代理服务器软件,它接收用户的下载申请并自动处理所下载的数据。即当一个用户下载www.idcshare的页面,他请求squid为他取得这个页面,suqid会连接到申请www.idcshare的网站并请求该主页,接着把主页传给用户并自己保留一份.当下一次有其他用户请求同样页面时,squid会从磁盘中读到保存那份,这样数据就会迅速传输到用户的机器上.

Squid支持以下协议

1) 客户端协议:HTTP .FTP.Gopher.WAIS.SSL

2) 缓存及管理协议:ICP(Internet Cache协议). HTCP(超文本缓冲协议).SNNP. Cache Digests

运行流程图:

1) Client端向Server端发送一个资料需求封包;

2) Server端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,或者说,来源与目标网站我们的Proxy都能帮忙取得资料时,那么Server端会预计开始替Client取得资料。

3) Server首先会到自己的硬碟里面,也就是所谓的cache 查看一下有没有Client端所需要的资料,如果有的话,那就将资料直接送到Client端而不经过向Internet要求资料的程序;

4) 将数据传回给客户端使用

5)在经过1, 2, 3查寻知道cache没有资料,或者资料过期之后, Proxy会向Internet上面的目标网站要求资料;

6)在将资料取回之后, proxy会先将取得的资料『储存一份到cache当中』;

7)最后才将资料传回给Client端使用。

代理服务器优点与类型

优点:

1) 通过缓存增加访问速度

2) 提供用私有ip访问internet的方法

3) 提高网络的安全性

4) 方便对用户的管理

类型:

1) 标准代理服务器

2) 透明代理服务器

3) 反向代理服务器

安装前期准备工作

1)源代码编译优化

一般情况下,优化参数都是通过export命令设定CFLAGS和CXXFLAGS,然后configure的时候会自动读入,make的时候会自动使用所选的优化参数。通过添加优化参数,让程序针对某个CPU型号和某个系统进行最大优化,减少文件大小、CPU使用率、内存使用率。优化后的程序,将不再具有跨系统跨平台的能力。

首先查看CPU信息,然后根据CPU信息到http://gentoo-wiki.com/Safe_Cflags去获取CPU优化参数

技巧:直接是打不开http://gentoo-wiki.com/Safe_Cflagshttp://www.proxyie.cn/输入http://gentoo-wiki.com,打开后点左侧栏的搜索,输入cpu。,要×××,打开

如下图:

[root@server soft]# cat /proc/cpuinfo |more

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 23

model name      : Intel(R) Xeon(R) CPU           E5420 @ 2.50GHz

stepping        : 10

cpu MHz         : 2493.978

cache size      : 6144 KB

physical id     : 0

siblings        : 4

core id         : 0

cpu cores       : 4

apicid          : 0

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 13

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush d

ts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr

lahf_lm

bogomips        : 4987.95

由于服务器model name 是Intel(R) Xeon(R) CPU,我选择如下图:

配置:

[root@server soft]#export CHOST="i686-pc-linux-gnu"

[root@server soft]#export CFLAGS="-march=Prescott -O2 -pipe -fomit-frame-pointer"

[root@server soft]#export CXXFLAGS="${CFLAGS}"

[root@server soft]#env

查看设置环境变量是否生效

红色标记,说明生效了.

3)修改描述符参数值

文件描述符用来限制一个程序能同时打开的文件数目,默认是1024。也就是说,如果不修改文件描述符,那么一个程序只能同时打开1024个文件,而Squid会同时打开成千上万个文件,所以远远是不够的,为了保证最高的效率和响应速度,要更改文件描述符的大小.

两种情况:a.用户每次访问squid,squid会按照需要打开文件,然后读取文件内容再返回给用户。

b.squid预先打开访问频率高的文件,用户访问squid,squid直接把内容返回给用户。相对来说,后面的方法可以对用户的请求进行更加快的反应。

首先修改以下两个文件。
/usr/include/bits/typesizes.h
/usr/include/linux/posix_types.h
用vi打开上面的文件查找
#define __FD_SETSIZE 1024
把1024改为65536,然后保存,这是Linux能接受的最大数值。

刚才编辑的这两个文件是C/C++程序里面的头文件,编译squid的时候会被自动引用。除了这两个文件以外,我们还需要对当前环境进行设置。也就是你用ssh登录到系统时的一些设定。每个登录进程都可以进行单独的设置,当关闭目前登录回话,环境变量的设置就失效了.

ulimit用来设置当前环境的一些资源限制。这个命令是对环境进行设置,所以退出当前登录进程后命令将会失效。

我们输入下面的命令

[root@server soft]#ulimit -Hs 65536 [root@server soft]#ulimit -n 65536 也可以永久修改这些限制,开机自动生效,配置如下: vi /etc/security/limits.conf,添加以下内容 *                soft   nofile          65536 *                hard   nofile          65536

H参数是硬性限制,s是堆栈上限,n是文件描述符上限。

注释:

ulimit 参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes

安装与配置

安装

[root@server soft]# wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE24.tar.gz

[root@server soft]# tar -zxvf squid-3.0.STABLE24.tar.gz

[root@server soft]# cd squid-3.0.STABLE24

[root@serversquid-3.0.STABLE24]#./configure --prefix=/usr/local/squid\--enable-gnuregex\--enable-icmp\--enable-linux-netfilter\--enable-default-err-language="Simplify_Chinese"\--enable-kill-parent-hack\--enable-cache-digests\--enable-dlmalloc\--enable-poll\--enable-async-io=240\--enable-delay-pools\--with-filedescriptors=65536\--enable-snmp\--enable-arp-acl\--mandir=/usr/share/man/--with-large-files

注释

可以用命令查看

[root@viong squid-3.0.STABLE24]# ./configure --help

--enable-gnuregex

在访问控制列表和其他配置指令里,squid使用正则表达式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,比如在proxy未来的规划当中。可能利用到正则表示法的方式来抵挡一些恶意的网站,你可以将这个选项加到./configure命令后.

--enable-icmp

squid能利用ICMP消息来确定回环时间尺寸,非常象ping程序。你能使用该选项来激活这些功能。

--enable-linux-netfilter

Netfilter是linux 2.4系列内核的包过滤器名字。假如你想在linux2.4或以后的版本中使用HTTP拦截功能,那么激活该选项。

--enable-default-err-language=lang

该选项设置error_directory指令的默认值。例如,假如你想使用荷兰语,你能这样指定:

% ./configure --enable-default-err-language=Dutch

你也能在squid.conf里指定error_directory指令,在附录A中有描述。假如你忽略该选项,英语是默认错误语言。

--enable-kill-parent-hack

在我们关掉squid的时候,连同parent process 一起关掉

--enable-cache-digests

Cache消化是ICP的另一个替代,但有着截然不同的特性

--enable-dlmalloc[=LIB]

在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。

--enable-poll

unix提供两个相似的函数用以在I/O事件里扫描开放文件描述符:select()和poll()../configure脚本通常能非常好的计算出何时使用poll()来代替select().假如你想强制使用poll(),那么指定该选项。

--enable-async-io[=N_THREADS]

异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。如果网站的服务器配置很高,可以尝试将这个数字改为160以上。如果是小网站的话,可以考虑降低到40左右.

请注意--enable-async-io是打开其他三个./configure选项的快捷方式,它等同于:

--with-aufs-threads=N_THREADS

--with-pthreads

--enable-storeio=ufs,aufs

--enable-delay-pools

延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工

--with-filedescriptors=65536

支持最大文件描述符

--enable-snmp

简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库。

--enable-arp-acl

允许基于MAC地址的存取过滤

--mandir=/usr/share/man

指定man的安装目录

--with-large-files

让log支持大于2G

[root@server squid-3.0.STABLE24]# make; make install

make[3]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'

make[2]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'

make[1]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'

make[1]: Entering directory `/root/soft/squid-3.0.STABLE24'

Build Successful.

make[2]: Entering directory `/root/soft/squid-3.0.STABLE24'

make[2]: Nothing to be done for `install-exec-am'.==================说明安装成功

make[2]: Nothing to be done for `install-data-am'.

make[2]: Leaving directory `/root/soft/squid-3.0.STABLE24'

make[1]: Leaving directory `/root/soft/squid-3.0.STABLE24'

[root@server squid-3.0.STABLE24]#

[root@server squid-3.0.STABLE24]# ll /usr/local/squid--enable-gnuregex/

总计 24

drwxr-xr-x 2 root root 4096 03-04 23:35 bin

drwxr-xr-x 2 root root 4096 03-04 23:35 etc

drwxr-xr-x 2 root root 4096 03-04 23:35 libexec

drwxr-xr-x 2 root root 4096 03-04 23:35 sbin

drwxr-xr-x 5 root root 4096 03-04 23:35 share

drwxr-xr-x 3 root root 4096 03-04 23:35 var

bin/ :放置主要的squid执行scripts的目录,重要的是RunCache那个档案;

etc/ :几乎所有的squid设定档都在这里;

libexec/ :一些函式库;

sbin/ :重要的就是那个squid的执行档!

share/ :一些错误讯息代码表示档案,以及一些小图示放置的目录;

var/ :预设是放置log file的,不过我不喜欢放在这里,这点等一下我们会修改的!

第一次运行squid时,要先设置/usr/local/squid/var权限,还有在/usr/local/squid/etc/squid.conf添加主机,visible_hostnam viong 并制定http_port 端口号.这里预设个80

[root@server squid-3.0.STABLE24]# chown -R nobody:nobody /usr/local/squid/var

[root@server squid-3.0.STABLE24]# /usr/local/squid/sbin/squid –zD

首次运行squid需要初始化cache,由于squid要验证其DNS可用才能启动,目前都没配置,所以我先禁用初始化DNS测试,先让squid启动

Squid[root@viong soft]# netstat -ntpl |grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN

[root@server squid-3.0.STABLE24]# /usr/local/squid/bin/squidclient -p 80 -h localhost mgr:info

取得squid运行状态信息

HTTP/1.0 200 OK

Server: squid/3.0.STABLE24

Mime-Version: 1.0

Date: Fri, 05 Mar 2010 14:43:26 GMT

Content-Type: text/plain

Expires: Fri, 05 Mar 2010 14:43:26 GMT

Last-Modified: Fri, 05 Mar 2010 14:43:26 GMT

X-Cache: MISS from viong

Via: 1.0 viong (squid/3.0.STABLE24)

Proxy-Connection: close

Squid Object Cache: Version 3.0.STABLE24

Start Time:     Fri, 05 Mar 2010 14:42:48 GMT

Current Time:   Fri, 05 Mar 2010 14:43:26 GMT

Connection information for squid:

Number of clients accessing cache:      1

Number of HTTP requests received:       0

Number of ICP messages received:        0

Number of ICP messages sent:    0

Number of queued ICP replies:   0

Number of HTCP messages received:       0

Number of HTCP messages sent:   0

Request failure ratio:   0.00

Average HTTP requests per minute since start:   0.0

Average ICP messages per minute since start:    0.0

Select loop called: 8659 times, 4.376 ms avg

Cache information for squid:

Hits as % of all requests:      5min: 0.0%, 60min: 0.0%

Hits as % of bytes sent:        5min: -0.0%, 60min: -0.0%

Memory hits as % of hit requests:       5min: 0.0%, 60min: 0.0%

Disk hits as % of hit requests: 5min: 0.0%, 60min: 0.0%

Storage Swap size:      0 KB

Storage Swap capacity:   0.0% used, 100.0% free

Storage Mem size:       104 KB

Storage Mem capacity:    1.3% used, 98.7% free

Mean Object Size:       0.00 KB

Requests given to unlinkd:      0

Median Service Times (seconds) 5 min    60 min:

HTTP Requests (All):   0.00000 0.00000

Cache Misses:          0.00000 0.00000

Cache Hits:            0.00000 0.00000

Near Hits:             0.00000 0.00000

Not-Modified Replies: 0.00000 0.00000

DNS Lookups:           0.00000 0.00000

ICP Queries:           0.00000 0.00000

Resource usage for squid:

UP Time:        37.890 seconds

CPU Time:       0.070 seconds

CPU Usage:      0.18%

CPU Usage, 5 minute avg:        0.00%

CPU Usage, 60 minute avg:       0.00%

Process Data Segment Size via sbrk(): 2784 KB

Maximum Resident Size: 0 KB

Page faults with physical i/o: 0

Memory usage for squid via mallinfo():

Total space in arena:    3052 KB

Ordinary blocks:         2938 KB      1 blks

Small blocks:               0 KB      0 blks

Holding blocks:          1520 KB      8 blks

Free Small blocks:          0 KB

Free Ordinary blocks:     113 KB

Total in use:            4458 KB 98%

Total free:               113 KB 2%

Total size:              4572 KB

Memory accounted for:

Total accounted:         1886 KB 41%

memPool accounted:       1886 KB 41%

memPool unaccounted:     2685 KB 59%

memPoolAlloc calls:      1504

memPoolFree calls:        481

File descriptor usage for squid:

Maximum number of file descriptors: 65536  =============文件描述符

Largest file desc currently in use:     16

Number of file desc currently in use:   10

Files queued for open:                   0

Available number of file descriptors: 1014

Reserved number of file descriptors:   100

Store Disk files open:                   0

Internal Data Structures:

26 StoreEntries

26 StoreEntries with MemObjects

25 Hot Object Cache Items

0 on-disk objects

注释:

Squidclient参数:
取得squid运行状态信息: squidclient -p 80 mgr:info
取得squid内存使用情况: squidclient -p 80 mgr:mem
取得squid已经缓存的列表: squidclient -p 80 mgr:objects
取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd

为了不每次输ulimit -HSn 65536 ,squid指定个启动脚本,复制一下脚本保存为squid.sh

#!/bin/sh
#
ulimit -HSn 65536
# starts and stops Squid
case "$1" in
start)
          /usr/local/squid/sbin/squid -s
          echo -n ' Squid'
          ;;
stop)
          /usr/local/squid/sbin/squid -k shutdown
          ;;
esac

以后启动或者停止squid,直接运行一下命令

[root@viong soft]# sh squid.sh stop

[root@viong soft]# sh squid.sh start

本文出自 “漫游Network-->成就Dream” 博客,请务必保留此出处http://viong.blog.51cto.com/844766/280978

本文出自 51CTO.COM技术博客

转载于:https://blog.51cto.com/lzy821218/307355

squid完全攻略(一)squid优化后详细安装步骤相关推荐

  1. squid完全攻略 squid优化后详细安装步骤

    Squid工作原理 http://os.51cto.com/art/201009/225813.htm http://os.51cto.com/art/201009/223455.htm Squid是 ...

  2. [精品教程,新老鸟必读]:极限装机、优化全攻略(新手优化教程)

    [精品教程,新老鸟必读]:极限装机.优化全攻略(新手优化教程)         对于一些新手们来说,如何装机和对电脑进行优化是一件头疼的事.现在网站上也有很多相关的教程,但基本上都是以理论为主,经常把 ...

  3. 【魔方攻略】三阶魔方教程之关键步骤(原创)

    [魔方攻略]三阶魔方教程之关键步骤(原创) 关键点:处理顶层十字的七种情况 顶层黄色面复原 顶层十字如图1-2: 将1的[鱼头]放置于右上角->执行[R U'2 R' U' R U' R'] 将 ...

  4. GNS3详细安装步骤与环境部署及优化

    GNS3详细安装步骤与环境部署及优化 GNS简介:GNS3是思科旗下一款具有图形化界面可以运行在多平台(包括Windows, Linux, and MacOS等)的网络虚拟软件.Cisco网络设备管理 ...

  5. 【阿里云双11薅羊毛攻略】领限量手办详细步骤

    阿里云今年双11出了个"带云小宝回家"的活动,一共限量3000个手办,还挺有科技感,出个攻略,方便大家去薅羊毛.按照下面的步骤,一步一步操作就行. 1.活动链接:https://d ...

  6. LS-WXL/E改机应用流程全攻略(改机+下载工具安装)

    申明:本攻略中用到的方法并非都是本人原创,本人只是将其它帖子中的方法进行整理,并将其中部分不适合的地方进行修改补充,引用方法的版权归原作者,如果需要转载,请注明出处,谢谢! 装机前必看:如果NAS开启 ...

  7. cube escape语言设置_Cube Escape: The Mill攻略大全 最全通关详细过程

    <Cube Escape: The Mill>是一款有趣的解谜游戏,游戏中玩家需要通过寻找道具和利用老奶奶制作出道具来解开各类的机关,揭露怪物的真面目,今日笨手机小编为大家带来的这款游戏的 ...

  8. 攻略:邮件搬家同一个域名操作步骤,设置邮箱搬家功能的方法

    企业邮箱的邮件可搬家,如果更换邮箱到TOM企业邮箱,可从其他账号搬邮件到在TOM新创建的账号,可以同一个域名,也可以是同一个账号,只要域名解析可灵活操作即可. 邮件搬家功能设置方法如下: 企业邮箱有两 ...

  9. SQL Server 2016详细安装步骤,后附链接

    SQL Server 2016安装步骤 安装步骤 链接 安装步骤 解压之后得到如下文件 先打开JDK安装包 右键以管理员身份运行 进入安装程序,点击下一步,这里的安装目录自己更改 修改完路径后点击下一 ...

最新文章

  1. CRM系统助家具企业华丽转身
  2. 前端学习(1980)vue之电商管理系统电商系统之实现文本框和按钮的切换
  3. mitmproxy抓包 | Python实时生成接口自动化用例
  4. mysql general bin区别_MySQL_编码utf8_bin和utf8_general_ci的区别
  5. 问题 J: Sequence Problem (II) : Array Practice
  6. java ajax传递到action_ajax传值到action,后台取不到值。
  7. 年末盘点,2021年最值得推荐的10个提高开发效率工具,程序员必备
  8. 吸收塔如何提高吸收率_缺钙了该如何补钙?饮食补钙更健康
  9. 从零开始学androidScrollView滚动视图.十八.
  10. springcloud视频教程免费下载
  11. 如何从uboot中推算路由器flash烧写地址
  12. oracle中查找执行效率低下的SQL
  13. 《华为工作法》6 华为的成功不是一个人的
  14. 【安全篇 / 反病毒】(5.6) ❀ 01. 反病毒的基本配置 ❀ FortiGate 防火墙
  15. vue项目中 一行文本 文字 根据关键字 改变颜色 改变展示颜色
  16. Python-Opencv fitLine 拟合直线
  17. 微信小程序请求wx.request报400(Bad Request)解决
  18. 关于推荐系统的全面调研与探讨!千万别错过!
  19. 发送腾讯云短信所依赖的完整jar包
  20. python nonlocal 的应用

热门文章

  1. 国内淘宝镜像 cnpm转npm
  2. ansible-playbook相关
  3. 常用 Http 的请求方法
  4. System.arraycopy用法
  5. 【Linux开发】linux设备驱动归纳总结(九):1.platform总线的设备和驱动
  6. Jquerymobile 简单安装
  7. 错误HIERARCHY_REQUEST_ERR: DOM Exception 3
  8. Excel 的点点滴滴
  9. vue-:class的几种使用方式
  10. (三): 十六进制转化为rgb