网站架设:squid配置详解-国内免备案最佳方案

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缓存过的文件,就无需重新回国内服务器上拉取了。对于生成静态的网站更合适不过了。