设为首页 收藏本站
查看: 647|回复: 0

[经验分享] C1-Squid_Cache-Server

[复制链接]

尚未签到

发表于 2018-10-14 09:31:51 | 显示全部楼层 |阅读模式
  C1-Squid_Cache-Server
  

  
拓扑:
  


  • DNS      10.0.100.71
  • Haproxy  10.0.100.82
  • Squid    10.0.100.72/73
  • Nginx    10.0.100.75/76
  • NFS      10.0.100.70

  • DNS
  •   |     (static)
  • Haproxy  ------>  Squid.72/73 (origin server Nginx.75/76)
  •   |(dynamic)
  • Nginx
  •   |
  • NFS
  

  

  
1 准备工作
  
1.1 修改文件描述符
  
文件描述符:文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。
  
第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。
  
更甚的是,unix通常有一个系统级的限制。因为squid的工作方式,文件描述符的限制可能会极大的影响性能。
  
当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。
  
直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。
  
在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。
  
大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。
  

  
//査看内核文件描述符
  


  • [root@squid ~]# sysctl -a | grep -i 'fs.file-max'
  

  fs.file-max = 100976
  
//或者
  


  • [root@squid ~]# cat /proc/sys/fs/file-max
  

  100976
  

  
//査看进程文件描述符
  


  • [root@squid ~]# ulimit -n
  • 1024
  

  
// 设置进程文件描述符
  


  • //这里设置的文件描述符是65536 (需要重启系统)
  • [root@squid ~]# echo -e '* soft nofile 65536
  • * hard nofile 65536'  >> /etc/security/limits.conf
  • //査看进程文件描述符
  • [root@squid ~]# ulimit -n
  • 65536
  

  
1.2 修改临时端口范围
  
临时端口是 TCP/IP 栈分配给出去连接的本地端口。换句话说,当 squid 发起一条连接到另一台服务器,内核给本地 socket 分配一个端口号。临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些 TCP 连接在它们被关闭时进入 TIME_WAIT 状态。当连接进入TIME_WATI 状态时,临时端口号不能被重用。
  
査看当前连接状态中的TIME_WAIT
  


  • [root@squid ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
  • TIME_WAIT 10212
  • CLOSE_WAIT 78
  • FIN_WAIT1 401
  • FIN_WAIT2 1
  • ESTABLISHED 1463
  • SYN_RECV 304
  • LAST_ACK 18
  

  
//査看临时端口范围
  
[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 源码包
  


  • wget -c http://www2.tw.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz
  • tar zxf squid-2.7.STABLE9.tar.gz
  • cd squid-2.7.STABLE9
  

  
2.2 配置
  


  • ./configure --prefix=/usr/local/squid --enable-epoll --enable-stacktraces --enable-follow-x-forwarded-for --enable-snmp --enable-storeio=ufs,diskd --enable-useragent-log --enable-referer-log --enable-forward-log --with-large-files --with-maxfd=65536
  

  //配置参数信息
  
--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 编译安装
  


  • make && make install
  

  

  
3 配置squid
  
//注意:squid 忽略空行和注释掉的行(以#开始),squid.conf 文件里的许多东西是大小写敏感的
  

  
3.1 添加 squid 用户
  


  • useradd squid -s /sbin/nologin -d /dev/null
  

  useradd: warning: the home directory already exists.
  
Not copying any file from skel directory into it.
  


  • passwd squid
  

  Changing password for user squid.
  
New UNIX password:
  
Retype new UNIX password:
  
passwd: all authentication tokens updated successfully.
  

  
3.2 建立cache 目录
  


  • mkdir -p /var/cache{1,2,3,4}
  

  
3.3 修改目录属主
  


  • chown -R squid.squid /var/cache{1,2,3,4}
  • chown -R squid.squid /usr/local/squid/var/logs/
  

  
3.4 编辑 squid.conf 配置文件 (PS:以最新附件为准!!)
  

  


  • cat > /usr/local/squid/etc/squid.conf h %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
  • #logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
  • #客户端请求日志,使用定义的Log 格式
  • access_log  /usr/local/squid/var/logs/access.log combined
  • #记录 Squid 关于存储或删除 cache 目标的决定
  • cache_store_log /usr/local/squid/var/logs/store.log
  • #cache 包含状态性的和调试性的消息
  • cache_log /usr/local/squid/var/logs/cache.log


  • #ACL(访问控制的设置)
  • acl localnet src 10.0.100.72 10.0.100.73  10.0.100.74
  • acl all src 0.0.0.0/0.0.0.0
  • http_access allow all
  • icp_access allow localnet

  • EOF
  

  4 运行 Squid
  
4.1 初始化cache 目录
  
//在首次运行 squid,或者增加新的 cache 目录时,你必须使用 -z 参数,用于初始化 cache,或者交换目录选项。
  


  • /usr/local/squid/sbin/squid -z
  

  
4.2 验证配置文件,假如你看不到输出,配置文件正常。
  


  • /usr/local/squid/sbin/squid -k parse
  

  
4.3 调试 squid
  
//-N 阻止 squid 变成后台服务进程
  
//-d level 让 squid 将它的调试信息写到标准错误
  


  • /usr/local/squid/sbin/squid -N -d1
  

  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>  
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 选项也是安全的。
  


  • /usr/local/squid/sbin/squid -s
  

  
4.5 验证squid 是否运行
  


  • lsof -i :80
  


  COMMAND   PID  USER   FD   TYPE DEVICE>  
squid   18750 squid   19u  IPv4  44519       TCP *:http (LISTEN)
  

  
4.6 开机自动启动squid
  


  • echo '/usr/local/squid/sbin/squid -s ' >> /etc/rc.local
  

  
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点 执行
  


  • crontab -e
  • 0 1 * * * /usr/local/squid/sbin/squid -k rotate
  

  

  
5 squid 目录结构
  
//在安装完后,你将在 squid 的安装目录里(默认是/usr/local/squid)见到下列目录和文件:
  


  • ls /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头标记:
  


  • Last-Modified: 告诉反向代理页面什么时间被修改
  • Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
  • Cache-Control: 告诉反向代理页面是否应该被缓冲
  • Pragma: 告诉反向代理页面是否应该被缓冲.
  

  

  
参考
  
Squid 中文权威指南
  

  
利用 squid 反向代理提高网站性能
  #update 20120810
  squid-conf-20120810.txt
  #update20130315
  去除版本(错误)信息
  去除via 头
  结束
  
更多请:
  
linux 相关 37275208
  
vmware 虚拟化相关  166682360



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-621356-1-1.html 上篇帖子: sql server不能执行查询 下篇帖子: 在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表