dashan 提交于
squid简介
Squid是一个缓存Internet数据的一个软件,它会接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP,NNTP等协议。不过,已经有人开始修改Squid,相信不久的将来,Squid能够代理这些协议。
Squid可用在很多操作系统中,如Linux、Unix、AIX、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO、Solaris、OS/2等,也有不少人在其他操作系统中重新编译过Squid。
squid配置
要配置squid,首先要确定是否安装此软件包。如下:
[root@ts3-142 ~]# rpm -qa|grep -i squid squid-2.6.STABLE6-3
和大多数网络服务一样,squid的配置文件也在/etc/squid下。其主要配置文件为/etc/squid/squid.conf,而其中主要的配置选项及介绍如下:
端口定义 # TAG: http_port # Usage: port [options] # hostname:port [options] //这里可以用ts3-142:3128 # 1.2.3.4:port [options] //这里可以用172.16.78.142:3128 #The default port number is 3128. //默认端口为3128,根据需要可以定义为8080或者80 http_port 3128
访问控制列表 # ACCESS CONTROLS # ----------------------------------------------------------------------------- # TAG: acl # Defining an Access List //定义访问控制列表 # # acl aclname acltype string1 ... //访问控制列表的格式 # acl aclname acltype "file" ... # # when using "file", the file should contain one item per line # # acltype is one of the types described below # # By default, regular expressions are CASE-SENSITIVE. To make # them case-insensitive, use the -i option. # *** IP地址访问控制列表*** # acl aclname src ip-address/netmask ... (clients IP address) //以源客户端IP地址为列表 # acl aclname src addr1-addr2/netmask ... (range of addresses) //以源IP地址范围为列表 # acl aclname dst ip-address/netmask ... (URL host's IP address) //以目的主机IP地址为列表 # acl aclname myip ip-address/netmask ... (local socket IP address) //squid主机的IP地址为myip列表 # # acl aclname arp mac-address ... (xx:xx:xx:xx:xx:xx notation) # # The arp ACL requires the special configure option --enable-arp-acl. # # Furthermore, the arp ACL code is not portable to all operating systems. # # It works on Linux, Solaris, FreeBSD and some other *BSD variants. # # # # NOTE: Squid can only determine the MAC address for clients that are on # # the same subnet. If the client is on a different subnet, then Squid cannot # # find out its MAC address. # ***域名访问控制列表*** # acl aclname srcdomain .dsjz.cn ... # reverse lookup, client IP //以域名为源列表 # acl aclname dstdomain .dsjz.cn ... # Destination server from URL //以域名为目的列表 # acl aclname srcdom_regex [-i] xxx ... # regex matching client name // # acl aclname dstdom_regex [-i] xxx ... # regex matching server # # For dstdomain and dstdom_regex a reverse lookup is tried if a IP # # based URL is used and no match is found. The name "none" is used # # if the reverse lookup fails. # ***时间访问控制列表*** # acl aclname time [day-abbrevs] [h1:m1-h2:m2] # day-abbrevs: # S - Sunday # M - Monday # T - Tuesday # W - Wednesday # H - Thursday # F - Friday # A - Saturday # h1:m1 must be less than h2:m2 ***其它访问控制列表*** # acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL //匹配以http://开始的列表 # acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path //匹配以.gif为结尾的列表 # acl aclname urllogin [-i] [^a-zA-Z0-9] ... # regex matching on URL login field // # acl aclname port 80 70 21 ... //端口列表 # acl aclname port 0-1024 ... # ranges allowed //端口范围列表 # acl aclname myport 3128 ... # (local socket TCP port) //squid本地端口 # acl aclname proto HTTP FTP ... //协议列表 # acl aclname method GET POST ... //访问方式列表 # acl aclname browser [-i] regexp ... //浏览器列表
访问控制 格式:http_access allow/deny aclname 典型访问控制规则如下: http_access allow your-aclname http_access deny all
注:这是一种国内免备案的较好的方法,数据放国内主机,用美国vps实现转发,利用dnspod智能解析实现简单CDN。
用了美国免备案VPS一年了吧,前前后后换了很多家了,不稳定、抽风、断电、莫名重启等等情况一个没漏地都遇上过,到最后感到累了不愿折腾过来折腾过去。
说说现在的方案,因为在国内有台服务器了,但因为bei an这个众所周知的原因没bei an的站是不能放的。都是些小企业站。
现在的解决方案:
所有网站全放到国内服务器(用的电信线路,比网通的快一些),IIS上不使用80端口使用例如8000端口这样的。
域名解析到美国vps的ip,VPS上只安装一个squid软件,实际测试这样占内存很小很小,256M的就足够用,将全部请求转发到国内服务器的8000端口。
我目前用了两家美国VPS服务商的不通地区和机房的vps,都是便宜的,加起来也不到100元(防止广告嫌疑,隐去用的vps服务商名称)。
把两个vps的ip都用 监控宝 监控起来,看看哪个比较稳定,就默认用哪个。
将正式网站的全部域名都用别名解析,都解析到如 cache.dsjz.cn 然后把cache.dsjz.cn 这个用dnspod的域名解析,默认解析到较稳定的vps,另一个vps的ip填到dnspod的宕机切换做备份用。
这样的优点:
1、这样用了一段时间了,除非两个vps都连不上,网站才挂掉。所以稳定性还是可以的。
2、其次这样也不用担心vps跑路,重装,误操作,断电等任何原因造成的数据丢失,因为数据不在美国vps上。只要国内的服务器足够你放心,再也不用为数据备份而头疼折腾了。
3、配置简单,即使vps重装,再重新配置,也不过十几分钟。对于遇到攻击等问题,因为无需迁移和配置网站,处理起来也方便的多。改一下解析即可。
4、网站速度比直接放到美国的vps上慢不了多少,因为静态文件都缓存起来了,动态的数据虽然不缓存需要多绕道一次,但开启gzip后,实际也很快。基本看不出多少差别。有人要问遇到大抽风咋办,这个没办法,要真这样即使把网站直接放美国独服也一样慢。
5、最大的一个优点,买个便宜的linux vps 可以反向代理到国内windows的服务器上,解决了美国windows vps价格较贵的问题。
6、无需很在意美国vps的cpu和硬盘等的性能问题,只要网络好就行了,实际网站的数据处理都在国内的服务器,美国的这个vps只是作为一个交换。
7、最主要的,不用bei an。如果不放心的话,可以把国内的源服务器设置为只允许vps的ip地址可以访问。
8、还可以设置智能解析,把网通用户解析到对网通友好的美国vps、电信用户解析到电信用户友好的美国vps上去,这个是单个的vps做不到的。
补充,使用squid比使用nginx的反向代理速度快多了,原因是squid缓存过的文件,就无需重新回国内服务器上拉取了。对于生成静态的网站更合适不过了。