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

[经验分享] Squid学习小结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-19 13:46:04 | 显示全部楼层 |阅读模式
  作者:fbysss
msn:jameslastchina@hotmail.com  
blog:blog.iyunv.com/fbysss
声明:本文由fbysss整理编写,转载请注明出处
关键字:Squid

  一、关于几种代理的简单说明
  1.正向代理
  也就是普通代理,一般用于内部局域网通过一台代理服务器上网的情况。客户端要上网,浏览器需要指定代理服务器。
  2.反向代理
  应用场景和正向代理不同,反向代理服务器的后端,不是内部客户机,而是Web应用服务器,这个代理是提供给外部用户来访问内部服务器的。方向与普通代理相反,故名之“反向代理”。
  3.透明代理
  透明代理,顾名思义,就是用户并不知道代理的存在。严格来讲,反向代理都可以说是透明的。但普通意义上的透明代理,指的就是正向代理中的一种,即可以通过某种服务器端设置,使得局域网中的客户机不用指定代理服务器,就能上网,感觉本机就是Internet上的一台主机一样。
  二、问题及解决
  # squid -z                                             
Squid Cache (Version 2.5.STABLE6): Terminated abnormally.

  原因:在cache_dir 后面加了一个ufs就可以了。
  再次运行的时候,出现错误:
FATAL:Failed to make swap directory (13) Permission denied.
原因是/usr/local/squid目录的所属用户是root,而运行squid是squid用户。
解决:chown squid /usr/local/squid -R

  再运行squid -z就可以了。
squid -k check可以检查运行状态。
service squid start|stop是运行|停止
squid -N -d1是前台运行,可看一些服务启动运行信息。

  如果dns没有配置,会在Performing dns tests之后报错:
FATAL: ipcache_init: DNS name lookup tests failed
从而导致squid无法启动。
squid -D可以略过DNS lookup,即squid -N -d1 -D 但此时使用servie squid start还是有问题。起不来。
我们的机器,日志在/var/log/squid/cache.log
squid在/etc/squid里。
错误:clientAccessCheck:proxy request denied in accel_only mode.
原因是在squid.conf中要加入:http_accel_with_proxy on
警告:
WARNING: No units on 'cache_mem 32M', assuming 32.000000 bytes
这个问题,网上居然这么难找到答案,是在匪夷所思。
原来就是cache_mem 32之后需要一个空格。真恶心。
squid -k shutdown可关闭正在运行的前台
chown squid:squid /var/log/squid/access.log 这样才可写。如果是root用户和root用户组,就不行了。

  http_port是指定squid的运行port,也就是在浏览器中指定的代理服务器端口号。
httpd_accel_port指的是实际的WEB服务器端口 。
/var/log/squid/access.log中的日期不是规范日期。解决办法:在conf文件中加入emulate_httpd_log on
aclParseIpData: WARNING: Netmask masks away part of the specified IP in '10.10.10.0/8'

只是一个警告,说明子网掩码划分的不合理。

  我们的项目测试时总是循环转发,问题出在客户端ip不在范围内。程序就是如此设计。
  httpd_accel_with_proxy on设定之后,squid就即作为代理服务器,又作缓存服务器了。
透明代理的方法:
iptables -t nat -A PREROUTING -p tcp –d 192.168.0.201 --dport 8080 -j REDIRECT --to-port 3128
这样,直接在浏览器端访问http://192.168.0.201:8080/demo就可以访问200的web服务器了。
如果加入
iptables -t nat -A PREROUTING -p tcp –d 192.168.0.201 --dport 8080 -j REDIRECT --to-port 3128
要删除规则,使用iptables -t nat -D PREROUTING -p tcp –d 192.168.0.201  --dport 8080 -j REDIRECT --to-port 3128
输入http://192.168.0.201 /demo即可。至于登录之后,还有8080端口,应该是应用写死了端口的缘故。
注意这句话可能要加到rc.local中。或者加入/etc/sysconfig/iptables文件。否则重启动就不行了。

  目前的分布:
192.168.0.200,为web应用服务器
squid位于192.168.0.201作为反向代理服务器
如果只做图片的缓存,配置如下:
httpd_accel_port 80
httpd_accel_host 127.0.0.1
当然,这样的反向代理,同时也是一个透明代理。
httpd_accel_with_proxy on
httpd_accel_host 还必须得设置地址。光用virtual不好使。也许是DNS没有解析的缘故。

  
  
配置好了之后,可以使用apache的ab命令来进行web压力测试。
  
===============
首先通过referer 来制定允许访问规则acl cnhubei referer_regex -i cnhubei
squid防盗链:deny_info http://.......jpg  
  ab -c 64 -n 2000 http://192.168.0.201 /phpinfo.php
c参数为并发数  即一次并发多少个连接
n参数为次数
发现在windows客户机上,一旦并发数超过64就报错apr_pollset_create failed: Invalid argument (22)
  
  
  
  三、squid 3.0 配置要注意的问题:
1.access.log 必须手工配置,不然不会自动生成
access_log /usr/local/squid3.0/var/logs/access.log
最关键的语句:
cache_peer 192.168.0.201 parent 80 0 no-query originserver name imageServer
如果没有originserver也是无法访问的。
一般来讲,还需要cache_domain配置。这样才能解决为多台服务器缓存的问题。
如果不配置cache_domain,那么,客户端使用ip地址和域名访问的效果是一摸一样的。
一旦配置了cache_domain,客户端只能使用域名来访问。直接写ip地址是不行的。
除非显示增加对ip的指定。
cache_domain imageServer img.sss.com
cache_domain imageServer 192.168.0.202 (squid所在的主机,注意不能写成web服务器地址)
也就是说,从这几句来看,无需借助DNS,就可以进行缓存配置了。
  
那么,dns在什么时候用呢?
cache_peer www1.abc.com 80 no-query originserver forceddomain=www1.abc.com name=imgServer
这种情况,就需要了。就是说不负责在这里解析ip,这些工作交给内部的DNS去干。
  dns_nameservers 10.0.0.1 192.172.0.4
  有意思的事情:如果最开始通过,然后注释掉本句,原来的看过的图片依然可以访问。原因是:cache并未清除 。squid -z只是重建索引。
要清除,可以删除cache目录下面的子目录,然后再重建。
  
  cache_peer 192.168.1.2 parent 8080 0 no-query originserver name=sss
cache_peer 192.168.1.3 8080 0 no-query originserver name=bbs
cache_peer 192.168.1.4 8080 0 no-query originserver name=ihompy
#定义不同的父节点将节点设为no-query以及originserver说明这些节点是实际服务器
cache_peer_domain sss www.sss.com
cache_peer_domain bbs bbs.sss.com
cache_peer_domain hellosss www.hellosss.com
#设定不同域名转发到不同的cache_peer上如果没有这项.不同域名的域名可能被分发到同一台服务器上.
(www.sss.com,bbs.sss.com,www.hellosss.com这些域名指向squid这台服务器ip 例192.168.1.5)
  这段话的意思就是说这三个域名,是用户访问的域名,而外部DNS都解析指向squid服务器一个地址,到了cache_peer这步之后,
都是8080端口,不知道应该转发给哪个服务器了,可能就随便选择一个。
而一旦指定了cache_peer_domain,则清晰的指定了转发的去向。
如果写成
cache_peer www.sss.com parent 8080 0 no-query originserver name=sss
cache_peer bbs.sss.com 8080 0 no-query originserver name=bbs
cache_peer www.hellosss.com 8080 0 no-query originserver name=hellosss
就是说,这里使用了域名替代了ip,要注意:这里的域名和cache_peer_domain的域名是一样的,但本质却不同。
下面的域名是针对用户的,通过外部DNS解析。而上面的域名是针对web服务器的,通过内部dns解析。里面都是内部地址。
试验成功:
即使没有DNS服务器,使用/etc/hosts文件即可。
而且,这个位置是默认,不在squid.conf中配置hosts_file都可以。
  四、下面给出squid3.0的一个反向代理精简配置:
编译的时候,./configure --prefix /usr/local/squid就可以了。
假设squid服务器的外部地址为202.204.48.23,内部地址为192.168.0.2
#关键配置
visible_hostname squid.sss.com
http_access_allow all
http_port 80 accel vhost vport
cache_peer inter.img.sss.com parent 80 no-query originserver name=imageServer
cache_peer_domain  imageServer img.sss.com
#其他配置:
debug_options ALL,1
cache_mem 32 MB
cache_dir ufs /usr/local/squid3.0/var/cache 100 16 256
access_log /usr/local/squid3.0/var/cache/logs/access.log
emulate_httpd_log on
cache_effective_user squid squid
-----------------------------------------------
vi etc/hosts
192.168.0.3 inter.img.sss.com
-----------------------------------------------
外部用户在访问img.sss.com时,外部的DNS解析对应地址202.204.48.23
然后squid判断来的域名符合img.sss.com,查找dns,或者hosts文件,解析inter.img.sss.com到192.168.0.3,并转发到80端口
  五、squidClient常用命令:
  *取得squid运行状态信息: squidclient -p 80 mgr:info
*取得squid内存使用情况: squidclient -p 80 mgr:mem
*取得squid已经缓存的列表: squidclient -p 80 mgr:objects. use it carefully, it may crash
*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
*强制更新某个url: squidclient -p 80 -m PURGE http://www.sss.com/test.jsp
  *更多的请查看:squidclient -h 或者 squidclient -p 80 mgr:
             版权声明:本文为博主fbysss原创文章,转载请注明出处

运维网声明 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-141196-1-1.html 上篇帖子: Squid第六章 访问控制 下篇帖子: Squid的访问控制列表语法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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