全部博文(4)
2012年(4)
分类: LINUX
2012-07-23 09:57:49
1 准备工作
1.1 修改文件描述符
文件描述符:文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。
第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。
更甚的是,unix通常有一个系统级的限制。因为squid的工作方式,文件描述符的限制可能会极大的影响性能。
当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。
直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。
在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。
大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。
//査看内核文件描述符
fs.file-max = 100976
//或者
100976
//査看进程文件描述符
// 设置进程文件描述符
1.2 修改临时端口范围
临时端口是 TCP/IP 栈分配给出去连接的本地端口。换句话说,当 squid 发起一条连接到另一台服务器,内核给本地 socket 分配一个端口号。临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些 TCP 连接在它们被关闭时进入 TIME_WAIT 状态。当连接进入TIME_WATI 状态时,临时端口号不能被重用。
査看当前连接状态中的TIME_WAIT
//査看临时端口范围
[root@squid ~]# sysctl -a | grep -i 'port_range'
net.ipv4.ip_local_port_range = 32768 61000
//修改临时端口范围
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range
或者编辑/etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65000
sysctl -p //不必重启系统,立即生效。
2 安装 squid
2.1 下载squid 源码包
2.2 配置
//配置参数信息
--prefix=/squid 这里为squid的安装目录
--enable-epoll 支持epoll的IO模式,2.6以上内核才具有
--enable-stacktraces 某些系统支持在程序崩溃时,自动产生数据追踪。当你激活该功能后,如果squid崩溃,数据追踪信息被写到cache.log文件。这些信息对开发和程序bug调试有用
--enable-follow-x-forwarded-for 当一个请求被另一些代理服务器转发时通过从http头中寻找X-Forwarded-For来发现直接或间接的客户端的IP地址
--enable-snmp 简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库
--enable-storeio=ufs,diskd Squid 支持大量的不同存储模块。通过使用该选项,你告诉squid 编译时使用哪个模块
--enable-useragent-log 该选项激活来自客户请求的HTTP 用户代理头的日志
--enable-referer-log 该选项激活来自客户请求的HTTP referer 日志
--enable-forward-log 支持实验forward-log指令
--with-large-files 支持大的文件
--with-maxfd=65536 覆盖的最大数量的filedescriptors
2.3 编译安装
3 配置squid
//注意:squid 忽略空行和注释掉的行(以#开始),squid.conf 文件里的许多东西是大小写敏感的
3.1 添加 squid 用户
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Changing password for user squid.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
3.2 建立cache 目录
3.3 修改目录属主
3.4 编辑 squid.conf 配置文件
4 运行 Squid
4.1 初始化cache 目录
//在首次运行 squid,或者增加新的 cache 目录时,你必须使用 -z 参数,用于初始化 cache,或者交换目录选项。
4.2 验证配置文件,假如你看不到输出,配置文件正常。
4.3 调试 squid
//-N 阻止 squid 变成后台服务进程
//-d level 让 squid 将它的调试信息写到标准错误
2012/06/14 13:33:43| Starting Squid Cache version 2.7.STABLE9 for x86_64-unknown-linux-gnu...
2012/06/14 13:33:43| Process ID 18449
2012/06/14 13:33:43| With 32768 file descriptors available
2012/06/14 13:33:43| Using epoll for the IO loop
2012/06/14 13:33:43| Performing DNS Tests...
2012/06/14 13:33:43| Successful DNS name lookup tests...
2012/06/14 13:33:43| DNS Socket created at 0.0.0.0, port 57935, FD 6
2012/06/14 13:33:43| Adding nameserver 192.168.57.71 from /etc/resolv.conf
2012/06/14 13:33:43| Adding nameserver 202.106.0.20 from /etc/resolv.conf
2012/06/14 13:33:43| Adding domain localhost from /etc/resolv.conf
2012/06/14 13:33:43| User-Agent logging is disabled.
2012/06/14 13:33:43| Referer logging is disabled.
2012/06/14 13:33:43| logfileOpen: opening log /usr/local/squid/var/logs/access.log
2012/06/14 13:33:43| Unlinkd pipe opened on FD 11
.....略
4.4 后台运行 squid
//-s 选项导致 squid 将重要的状态和警告信息写到 syslogd。
squid 使用 LOCAL4 设备,和LOG_WARNING 和 LOG_NOTICE 优先权。
syslog 进程实际可能会或不会记录 squid 的消息,这依赖于它被如何配置。
同样的消息被写进 cache.log 文件,所以假如你愿意,忽略-s 选项也是安全的。
4.5 验证squid 是否运行
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
squid 18750 squid 19u IPv4 44519 TCP *:http (LISTEN)
4.6 开机自动启动squid
4.7 squid 的管理功能
//-k function 功能参数是下列之一:
reconfigure 导致运行中的 squid 重新读取配置文件。 #!!
rotate 导致 squid 滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。 #!!
shutdown 发送关闭 squid 进程的信号。 #!!
interrupt 立刻关闭 squid,不必等待活动会话完成。
kill 发送 KILL 信号给 squid,这是关闭 squid 的最后保证。
debug 将 squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。
check 简单的检查运行中的 squid 进程,返回的值显示 squid 是否在运行。
parse 简单的解析 squid.conf 文件,如果配置文件包含错误,进程返回非零值。 #!!
4.8 squid 日志轮询
除非你在 squid.conf 里禁止,squid 会写大量的日志文件。你必须周期性的滚动日志文件,以阻止它们变得太大。
squid 将大量的重要信息写入日志,假如写不进去了,squid 会发生错误并退出。为了合理控制磁盘空间消耗,在 cron 里使用如下命令:
//编辑crontab 每天1点 执行
5 squid 目录结构
//在安装完后,你将在 squid 的安装目录里(默认是/usr/local/squid)见到下列目录和文件:
bin etc libexec sbin share var
5.1 sbin 目录
sbin 目录的程序正常只能被 root 启动
sbin/squid
Squid 的主程序
5.2 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 进程发起管理请求。
5.3 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,你才能看到它。
5.4 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 文件。
5.5 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 时,
安装过程总会覆盖它们。所以假如你想定制错误消息,建议你把它们放在不同的目录。
5.6 var 目录
var 目录包含了不是很重要的和经常变化的文件。这些文件你不必正常的备份它们。
var/logs
var/logs 目录是 squid 不同日志文件的默认位置。当你第一次安装 squid 时,它是空的。
一旦 squid 开始运行,你能在这里看到名字为 access.log,cache.log 和 store.log 这样的文件。
var/cache
假如你不在 squid.conf 文件里指定,这是默认的缓存目录(cache_dir)。第七章有关于缓
存目录的所有细节
6 其它
Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。
它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面,有四个最重要HTTP头标记:
参考
利用 squid 反向代理提高网站性能
结束
更多请:
linux 相关 37275208
vmware 虚拟化相关 166682360