温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

squid 安装简单说明

发布时间:2020-06-27 16:53:48 来源:网络 阅读:1092 作者:ckl893 栏目:系统运维

suid 下载及安装

1. squid 安装硬件要求

Squid运行在所有流行的Unix系统上,也可以在Microsoft Windows上运行。尽管squid的Windows支持在不断改进,但也许在Unix上容易一些。假如你有一个喜欢的操作系统,我建议你使用那个。否则,假如你找人推荐,我很喜欢FreeBSD。

squid对硬件要求不算高。内存是最重要的资源。内存短缺会严重影响性能。磁盘空间也是另一个重要因素。更多的磁盘空间意味着更多的缓存目标和更高的命中率。快速的磁盘和驱动器也是有利的。如果你舍得花钱,SCSI磁盘比ATA的执行性能好。当然快速的CPU也是好的,但它并不是提高性能的关键因素。

因为squid对每个缓存响应使用少数内存,因此在磁盘空间和内存要求之间有一定联系。基本规则是,每G磁盘空间需要32M内存。这样,512M内存的系统,能支持16G的磁盘缓存。你的情况当然会不同。内存需求依赖于如下事实:缓存目标大小,CPU体系(32位或64位),同时在线的用户数量,和你使用的特殊功能。

人们经常问如此问题:“我的网络有X个用户,需要配备什么样的硬件给squid?”因为许多理由,这样的问题好难回答。特别的,很难说X个用户将产生多少流量。我告诉人们去建立一个有足够磁盘空间,可存储3-7天web流量数据的系统。例如,假如你的用户每天8小时耗费1M流量(仅仅HTTP和FTP传输),那就是每天大约3.5G。所以,我可以说,每兆web传输你需要10到25G的磁盘空间。


2.2.squid 下载及安装

2.2.1.squid 下载地址

 http://www.squid-cache.org/


2.2.3.安装前准备

 1) 文件描述符修改

     文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix通常有一个系统级的限制。

因为squid的工作方式,文件描述符的限制可能会极大的影响性能。当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。

在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2倍。

通常在你的Unix shell中能找到系统的文件描述符限制。所有的C shell及其类似的shell有内建的limit命令。更新的Bourne shell及其类似的shell有一条叫做ulimit的命令。为了发现你的系统的文件描述符限制。

  方法一:

  ulimit -SHn 20480

  方法二:

  vi /etc/security/limits.conf 

  *    -    nofile  20480


  2)调整临时端口范围

   临时端口是TCP/IP栈分配给出去连接的本地端口。换句话说,当squid发起一条连接到另一台服务器,内核给本地socket分配一个端口号。这些本地端口号有特定的范围限制。例如,在FreeBSD上,默认的临时端口范围是1024-5000。

临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些TCP连接在它们被关闭时进入TIME_WAIT状态。当连接进入TIME_WATI状态时,临时端口号不能被重用。

  查看本地端口范围:

    #cat /proc/sys/net/ipv4/ip_local_port_range

    #32768   61000

  修改临时端口范围:

    #echo "net.ipv4.ip_local_port_range = 4000 65000" >> /etc/sysctl.conf 

    #sysctl -p


 2.3.4 安装


 # tar -zxf squid-3.0.STABLE26.tar.gz 

 #./configure --prefix=/usr/local/squid --enable-storeio=ufs,aufs --enable-icmp

 # make

 # make install


2.3.5.目录结果说明:

# tree -L 2 /usr/local/squid/

/usr/local/squid/

├── bin

│   ├── RunAccel

│   ├── RunCache

│   └── squidclient

├── etc

│   ├── cachemgr.conf

│   ├── cachemgr.conf.default

│   ├── mime.conf

│   ├── mime.conf.default

│   ├── squid.conf

│   └── squid.conf.default

├── libexec

│   ├── cachemgr.cgi

│   ├── pinger

│   └── unlinkd

├── sbin

│   └── squid

├── share

│   ├── errors

│   ├── icons

│   ├── man

│   └── mib.txt

└── var

    └── logs

 

sbin

sbin目录的程序正常只能被root启动


sbin/squid

Squid的主程序


bin

bin目录包含对所有用户可用的程序


bin/RunCache

RunCache是一个shell脚本,你能用它来启动squid。假如squid死掉,该脚本自动重启它,除非它检测到经常的重启。RunCache是一个时间遗留的产物,那时Squid还不是后台服务进程。在最近的版本里,RunCache很少用到,因为Squid自动重启它自身,当你不使用-N选项时。


bin/RunAccel

RunAccel与RunCache几乎一致,唯一的不同是它增加了一个命令行参数,告诉squid在哪里侦听HTTP请求。


bin/squidclient

squidclient是个简单的HTTP客户端程序,你能用它来测试squid。它也有一些特殊功能,用以对运行的squid进程发起管理请求。


libexec

libexec目录传统的包含了辅助程序。有一些命令你不能正常的启动。然而,这些程序通常被其他程序启动。


libexec/unlinkd

unlinkd是一个辅助程序,它从cache目录里删除文件。如你后面看到的一样,文件删除是个性能瓶颈。通过在外部进程里执行删除操作,Squid提升了一些执行性能。


libexec/cachemgr.cgi

cachemgr.cgi是Squid管理功能的CGI接口。为了使用它,你需要拷贝该程序到你的WEB服务器的cgi-bin目录。在14.2章中有更多描述。


libexec/diskd(optional)

假如你指定了--enable-storeio=diskd,你才能看到它。


libexec/pinger(optional)

假如你指定了--enable-icmp,你才能看到它。


etc

etc目录包含squid的配置文件。


etc/squid.conf

这是squid的主要配置文件。初始的该文件包含了大量的注释,用以解释每一个选项做什么。在你理解了这些配置指令后,建议你删除这些注释,让配置文件更小和更容易阅读。注意假如该文件存在,安装过程不会覆盖该文件。


etc/squid.conf.default

这是从源代码目录中拷贝过来的默认配置文件。在升级了squid安装后,你也许发现有一份当前默认配置文件的拷贝是有用的。可能会增加新的配置指令,一些存在的旧指令可能有所改变。


etc/mime.conf

mime.conf文件告诉squid对从FTP和Gopher服务器获取的数据使用何种MIME类型。该文件是一个关联文件名扩展到MIME类型的表。正常而言,你不必编辑该文件。然而,你可能需要增加特殊文件类型的接口,它们在你的组织内使用。


etc/mime.conf.default

这是从源代码目录里拷贝过来的默认mime.conf文件。


share

share目录通常包括squid的只读数据文件。


share/mib.txt

这是squid的SNMP管理信息基础(MIB)文件。squid自身不使用该文件,然而,你的SNMP客户端软件(例如snmpget和多路由走向图(MRTG))需要该文件,用以理解来自squid的SNMP对象可用。


share/icons

share/icons目录包含大量的小图标文件,squid用在FTP和Gopher目录列举里。正常而言,你不必担心这些文件,但如果需要,你可以改变它们。


share/errors

share/errors目录包含了squid显示给用户看的错误消息模板。这些文件在你安装squid时,从源代码目录拷贝而来。如果需要你可以编辑它们。然而,在每次运行make install时,安装过程总会覆盖它们。所以假如你想定制错误消息,建议你把它们放在不同的目录。


var

var目录包含了不是很重要的和经常变化的文件。这些文件你不必正常的备份它们。


var/logs

var/logs目录是squid不同日志文件的默认位置。当你第一次安装squid时,它是空的。一旦squid开始运行,你能在这里看到名字为access.log,cache.log和store.log这样的文件。


2.3.6 squid.conf 语法

Squid的配置文件相对规范。它与其他许多unix程序相似。每行以配置指令开始,后面跟着数字值或关键字。在读取配置文件时,squid忽略空行和注释掉的行(以#开始)。如下是一些配置行示例:

cache_log /squid/var/cache.log

# define the localhost ACL

acl Localhost src 127.0.0.1/32

connect_timeout 2 minutes

log_fqdn on


某些指令取唯一值。在这些情形下,重复赋予该指令不同的值,将覆盖前面的值。例如,下面是一个连接超时值。第一行无效,因为第二行覆盖了它:

connect_timeout 2 minutes

connect_timeout 1 hour

另外,某些指令取列表值。在这些情形下,每一个新增的值都有效。"扩展方式"指令以这种方法工作:

extension_methods UNGET

extension_methods UNPUT

extension_methods UNPOST

对这些基于列表的指令,你通常能在同一行中赋予多个值:

extension_methods UNGET UNPUT UNPOST


许多指令有通用类型。例如,连接超时值是一个时间规范,在数字后面跟着时间单元。例如:

connect_timeout 3 hours

client_lifetime 4 days

negative_ttl 27 minutes


类似的,大量的指令指向文件大小或者内存额度。例如,你可以这样编写大小规范:十进制数字后面跟bytes,KB,MB或GB.例如:

minimum_object_size 12 bytes

request_header_max_size 10 KB

maximum_object_size 187 MB


另一种值得提起的类型是触发器,它的值是on或者off。许多指令使用该类型。例如:

server_persistent_connections on

strip_query_terms off

prefer_direct on


通常,配置文件指令能以任何顺序出现。然而,如果某个指令指向的值被其他指令所定义,那么顺序就很重要。访问控制列表是个好的例子。acl被用在http_access规则之前必须被定义:

acl Foo src 1.2.3.4

http_access deny Foo


squid.conf文件里的许多东西是大小写敏感的,例如指令名。你不能将http_port写成HTTP_port。

默认的squid.conf文件包含了对每个指令的大量注释,以及指令的默认值。例如:

# TAG: persistent_request_timeout

# How long to wait for the next HTTP request on a persistent

# connection after the previous request completes.

#

#Default:

# persistent_request_timeout 1 minute

每次安装squid后,当前默认配置文件存放在$prefix/etc目录下的squid.conf.default。既然指令每次都有所改变,你能参考该文档,以获取最近的更新。


2.3.7 squid 用户

你可能知道,unix进程和文件拥有文件和组属主的属性。你必须选择某个用户和组给squid。该用户和组的组合,必须对大部分squid相关的文件和目录有读和写的权限。

我高度推荐创建名为"squid"的用户和组。这避免了某人利用squid来读取系统中的其他文件。假如不止一个人拥有对squid的管理权限,你可以将他们加到squid组里。

不幸的是,运行squid并非总是如此简单。在某些情况下,你必须以root来启动squid,这依赖于你的配置。例如,仅仅root能绑定TCP套接字到特权端口上,如80。假如你必须以root来启动squid,你必须设置cache_effective_user指令。它告诉squid,在执行完需要特别权限的任务后,变成哪个用户。例如:

cache_effective_user squid

你提供的该名字必须是有效用户(在/etc/passwd文件里)。请注意仅仅当你以root来启动squid时,你才需要用到该指令。仅仅root有能力来随意改变用户身份。假如你以joe来启动squid,它不能改变到squid用户。

你可能尝试不设置cache_effective_user,直接以root来运行squid。假如你试过,你会发现squid拒绝运行。这违背了安全规则。假如外部***者有能力危及或利用squid,他能获取对系统的全部访问权。尽管我们努力使squid安全和少bug,但还是稳重点好。

假如你没有设置cache_effective_user,以root来启动squid,squid使用nobody作为默认值。不管你选择什么用户ID,请确认它有对下面目录的读访问权:$prefix/etc,$prefix/libexec,$prefix/share.该用户ID也必须有对日志文件和缓存目录的写访问权。

squid也有一个cache_effective_group指令,但你也许不必设置它。默认的,squid使用cache_effective_user的默认组(从/etc/passwd文件读取)。


# /usr/sbin/useradd -s /sbin/nologin squid -M

默认用户为nobody

# grep cache_effective_user /usr/local/squid/etc/squid.conf

#  TAG: cache_effective_user

# cache_effective_user nobody


修改用户及组

cache_effective_user squid

cache_effective_group squid


2.3.8 squid 日志路径

你必须确认日志文件所存放的磁盘位置空间足够。在squid写日志时如果接受到错误,它会退出和重启。该行为的主要理由应引起你的注意。squid想确认你不会丢失任何重要的日志信息,特别是你的系统被滥用或者被***时。

squid有三个主要的日志文件:cache.log,access.log,store.log.

cache.log:

包含状态性的和调试性的消息。当你刚开始运行squid时,你应密切的关注该文件。假如squid拒绝运行,理由也许会出现在cache.log文件的结尾处。在正常条件下,该文件不会变得很大。也请注意,假如你以-s选项来运行squid,重要的cache.log消息也可被送到你的syslog进程。通过使用cache_log指令,你可以改变该日志文件的路径:

access.log:

access.log文件包含了对squid发起的每个客户请求的单一行。一般为HTTP访问日志,每行平均约150个字节。也就是说,在接受一百万条客户请求后,它的体积约是150M。请使用cache_access_log指令来改变该日志文件的路径:

cache_access_log /squid/logs/access.log

store.log:

store.log文件对大多数cache管理员来说并非很有用。它包含了进入和离开缓存的每个目标的记录。平均记录大小典型的是175-200字节。然而,squid不在store.log里对cache点击创建接口,所以它比access.log包含少得多的记录。请使用cache_store_log指令来改变它的位置

cache_store_log /squid/logs/store.log


access_log /usr/local/squid/var/logs/access.log squid

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log


2.3.9 squid缓存路径

cache_dir: 指定磁盘的缓存路径

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


100 指定目录大小MB

16 一级目录的数量

256 二级子目录的数量


2.3.10 squid 端口

http_port指令告诉squid在哪个端口侦听HTTP请求。默认端口是3128:

http_port 3128

如果squid 作为反向代理,应该将此值设置为80

你能使用附加的http_port行,来指示squid侦听在多个端口上。假如你必须支持客户组(它们被配置得不一致),这点就经常有用。例如,来自某个部门的浏览器发送请求到3128,然而另一个部门使用80端口。简单的将两个端口号列举出来:

http_port 3128

http_port 8080

你也能使用http_port指令来使squid侦听在指定的接口地址上。当squid作为防火墙运行时,它有两个网络接口:一个内部的和一个外部的。你可能不想接受来自外部的http请求。为了使squid仅仅侦听在内部接口上,简单的将IP地址放在端口号前面:

http_port 192.168.1.1:3128


例如:如果本机运行http和squid 则指定ip地址即可:192.168.1.1:80


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI