如何在linux上用squid搭建代理服务器
安装环境
操作系统: CentOS release 52 (Final)
Kernel: 2618-92el5PAE
软件列表
squid-26STABLE22targz
软件存放位置
/data/software
安装过程
#/usr/sbin/groupadd squid -g 610
#/usr/sbin/useradd -u 610 -g squid squid
#mkdir /srv/scache
#chmod +w /var/vcache
#chown -R squidsquid /srv/scache
#mkdir /var/log/squid
#chmod +w /var/log/squid
#chown -R squidsquid /var/log/squid
#cd /data/software/pkg
#tar zxvf /squid-26STABLE22targz
#cd squid-26STABLE22
#/configure --prefix=/usr/local/squid
#make && make install
编辑Squid配置文件
#vi /usr/local/squid/etc/squidconf
-------------------------华丽的分割线,以下都是配置文件内容----------------------------
#定义acl项名称
acl all src 0000/0000
acl manager proto cache_object
acl localhost src 127001/255255255255
acl to_localhost dst 127000/8
acl SSL_ports port 443
acl Safe_ports port 80
acl safeprotocol protocol HTTP
acl test dstdomain testcom
acl CONNECT method CONNECT
#定义acl规则
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow safeprotocol Safe_ports test
http_access deny all
icp_access allow all
#squid监听端口
http_port 80 accel defaultsite=591513258 vhost
always_direct allow all
#后端服务器
cache_peer 1010108 parent 80 0 no-query originserver
hierarchy_stoplist cgi-bin
#内存cache大小
cache_mem 2048 MB
#内存cache中最大的object大小(超过这个值则不进入内存cache)
maximum_object_size_in_memory 8 KB
#内存cache的替换规则
memory_replacement_policy lru
#硬盘cache的替换规则
cache_replacement_policy lru
#磁盘cache目录(文件类型 cache目录路径 cache目录大小 二级目录个数 每个二级目录下的三级目录个数)
cache_dir ufs /srv/scache 40000 16 256
#磁盘cache中最小的object的大小(低于这个值则不缓存)
minimum_object_size 0 KB
#磁盘cache中最大的object的大小(超过这个值则不缓存)
maximum_object_size 2048 KB
cache_swap_low 90
cache_swap_high 95
#定义日志格式
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
#记录相关日志
access_log /var/log/squid/accesslog squid
cache_log /var/log/squid/cachelog
cache_store_log /var/log/squid/storelog
#日志rotate(24则后缀从0到23)
logfile_rotate 24
emulate_httpd_log on
#如果你的URL里面带有,这两行一定要注销掉
#acl QUERY urlpath_regex cgi-bin \
#cache deny QUERY
#配置自动更新(关于后面的三个值请参考Squid配置手册)
refresh_pattern -i \jpg$ 60 80% 1440
refresh_pattern -i \png$ 60 80% 1440
refresh_pattern -i \gif$ 60 80% 1440
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
request_header_max_size 10 KB
reply_header_max_size 10 KB
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#相关timeout设置
forward_timeout 4 minutes
connect_timeout 3 minutes
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minute
persistent_request_timeout 3 minutes
half_closed_clients off
pconn_timeout 1 minute
#cache管理员邮箱
cache_mgr webmaster@testcom
cache_effective_user squid
cache_effective_group squid
#squid服务器的visible_hostname,此处指定的值显示在Squid响应的Header里面的X-Cache项中
visible_hostname squidserver
coredump_dir /var/log/squid/cache
------------------------华丽的分割线,以上都是配置文件内容-----------------------------
初始化squid缓存目录
#/usr/local/squid/sbin/squid -z
启动squid
#/usr/local/squid/sbin/squid -sD
配置完成以后,最重要最重要的一点,修改Squid服务器的hosts文件,将需要Cache的域名指向到后端的服务器IP上
相关命令
停止squid
/usr/local/squid/sbin/squid -k shutdown
启用新配置
/usr/local/squid/sbin/squid -k reconfig
通过crontab每小时截断/轮循日志
59 /usr/local/squid/sbin/squid -k rotate
查看squid运行状况
/usr/local/squid/bin/squidclient -p 80 mgr:info
/usr/local/squid/bin/squidclient -p 80 mgr:5min
查看squid内存使用情况
/usr/local/squid/bin/squidclient -p 80 mgr:mem
查看squid磁盘使用情况
/usr/local/squid/bin/squidclient -p 80 mgr:diskd
查看squid已缓存列表(小心使用,可能会导致crash)
/usr/local/squid/bin/squidclient -p 80 mgrbjects
强制更新某个url
/usr/local/squid/bin/squidclient -p 80 -m PURGE http://imgtestcom/h/ajpg
查看squid缓存到内存cache中并返回给访问用户的项
#cat /var/log/squid/accesslog | grep TCP_MEM_HIT
查看squid缓存到磁盘cache中并返回给访问用户的项
#cat /usr/local/squid/var/logs/accesslog | grep TCP_HIT
查看没被squid缓存住,直接从原始服务器获取并返回给访问用户的项
#cat /usr/local/squid/var/logs/accesslog | grep TCP_MISS
你参考文献过期了,RHEL55的squid26不需要你添加的这些参数了。另外,透明代理需要iptables配合使用echo1>/proc/net/ipv4/ip_forwardmodprobeip_nat_ftpserviceiptablesstopiptables-tnat-A-s$NET-jMASQUERADEiptables-tnat-APREROUTING-ptcp--dport80-jREDIRECT--to3128
安装步骤:
/configure --prefix=/usr/local/squid
make all
sudo make install(因为要拷贝到系统目录,需要root权限,所以sudo了,你也可以root登录执行,我是Ubuntu的系统,所以用sudo,有root权限就行)
检查配置文件:
sudo vi /usr/local/squid/etc/squidconf
配置项1:
# Squid normally listens to port 3128
http_port 3128
配置项2:
acl localnet src 19216800/16
http_access allow localnet
配置项3:
# Uncomment and adjust the following to add a disk cache directory
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 128
cache_mem 32 MB (这一条必须配置)
否则你就会遭遇报错: 2013/10/12 16:16:55 kid1| WARNING cache_mem is larger than total disk cache space!
安装好了以后,系统中新建了一个用户squid,在组中一查,发现属于nobody组的:
cat /etc/passwd|grep squid
cat /etc/group|grep 65534
安装squid的所在目录是:/usr/local/squid
我闲得没事干,直接改了所属用户为squid:nobody
sudo chown -Rf squid:nobody /usr/local/squid
建立cache的时候,对下面目录需要nobody用户权限,这个是网上没有说的很清楚的地方,折腾了我半天:
sudo chown -Rf nobody /usr/local/squid/var/cache/
sudo chown -Rf nobody /usr/local/squid/var/logs/
否则你会遭遇:
WARNING: Cannot write log file: /usr/local/squid/var/logs/cachelog
FATAL: Failed to make swap directory /usr/local/squid/var/cache/squid/00: (13) Permission denied
初始化squidconf里配置的cache目录,就是建立了一堆的目录:
sudo /usr/local/squid/sbin/squid -z
在前台启动squid,并输出启动过程
sudo /usr/local/squid/sbin/squid -N -d1
显示ready to server reques,则启动成功。可以键入ctrl+c,停止squid,并以后台运行的方式启动。
我没有在配置文件中配置DNS,而是在 /etc/resolvconf 中配置:
domain site
nameserver xxxx
所以打印出来的日志中就这样的:
2013/10/12 16:42:13| Adding nameserver xxxx from /etc/resolvconf
squid从这个配置文件中读取了dns配置来用。
启动squid后台运行
sudo /usr/local/squid/sbin/squid -s
检查一下进程是否存在:ps -ef|grep squid
通过squid客户端查看squid运行状态
/usr/local/squid/bin/squidclient -h 127001 -p 3128 mgr:info
那台不能上网的机器配置如下:
export http_proxy=
可以把这句写到你的启动文件中,比如什么profile或者bashrc,或者/etc/profile等等。
取消:unset http_proxy
测试一下能不能上网了:
能down下来文件就算大功告成啦。
Squid缓冲服务,可能是代理服务器,或者搜索引擎的快照
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人
们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想
下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如
:http://squidnlanrnet/)并向这个页面发出请求。然后,Squid显式地聚集数据
到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地
从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FT
P,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的
Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:
Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris
东西。
有人认为,Wiki系统属于一种人类知识网格系统,可以在Web的基础上对Wiki文本进行浏览、创建、更改,而且创建、更改、发布的代价远比HTML文本小;同时Wiki系统还支持面向社群的协作式写作,为协作式写作提供必要帮助;最后,Wiki的写作者自然构成了一个社群,Wiki系统为这个社群提供简单的交流工具。与其它超文本系统相比,Wiki有使用方便及开放的特点,所以Wiki系统可以帮助我们在一个社群内共享某领域的知识。
由于WiKi可以调动最广大的网民的群体智慧参与网络创造和互动,它是web20的一种典型应用,是知识社会条件下创新20的一种典型形式。它也为教师和学生的知识共享提供了高效的平台,实现了快速广泛的信息整合。
Wiki的架构
GeoDNS
这个GeoDNS可能比较新奇,实际上原理很简单,GeoDNS是一个为BIND写的40行的小程序,可以让DNS解析的时候考虑地域因素——让用户能够访问离他地域最近的Web服务器。
LVS
LVS 是一个开源的软件,可以实现 Linux平台下的简单负载均衡。主要由负载调度器、服务器池和共享存储构成。可喜的是,这是一款为数不多的中国人自己编写的开源软件(章文嵩发起);可惜的是,LVS目前仅支持Linux。
Squid
Squid大家可能都比较熟悉,Squid是一种用来缓冲Internet数据的软件。尤其适合像维基这样的遍布全球,数据中心却很集中的站点使用。在维基中,Squid缓存分为两组,一组是文档内容(多为压缩的HTML页面),另一组为媒体内容,主要包括等大一点的静态文件。目前总计有55台Squid服务器在维基运行,维基正在准备添加另外的20台。根据维基披露的资料,其中每一台服务器每秒要处理1000~2500 个http请求,每台服务器承受100Mb/s~250Mb/s的流量,每台服务器负责14~32万个连接,每台Squid服务器分配出40GB作为缓存空间。硬件方面,这些Squid服务器每台都有4块硬盘,8GB内存。
维基媒体平台
维基所有的项目都运行在维基媒体平台上,这是一个遵守GPL的开源软件,以PHP写成。维基本身在使用,但很多别的机构也使用了该软件平台。在所有125台应用服务器上都安装了维基媒体平台,还有40台应用服务器马上就要上线,这些应用服务器都采用了两颗四核的CPU。这些媒体平台都由一个中心控制台控制,维基可以通过该平台部署某个应用到数百台机器上,非常方便。维基媒体平台非常注重缓存,多数缓存都放在Memcached中。
CDN
维基在美国、荷兰和韩国分别设有群集,维基CDN会根据来访IP位置的不同选择指向最近的群集。
数据存储
元数据,比如文章修改历史,文章的链接和用户资料等内容被存放于主数据库;正文存于外部存储;用户上传的等信息则单独存放于服务器。
主数据库服务器一共有15台,配置为内存4GB~16GB,6块73~146GB的硬盘和双CPU。数据库中除了有一个主数据库,还有许多复制的从数据库,这些主从数据库并不是按照服务器个数来划分的,数据库都是跨服务器运行的。
今天写这篇教程目的在于分享自己在WINDOWS主机下配置squid的方法。哪些地方写的不完善或是不完整或是需要修改的地方,大家可以提出。我会第一时间纠正。下面看正文部分。
先提条件,您预安装配置squid的这台计算机必须是联入网络的,系统版本是windows 2000/xp/2003/server 2003。
1)先下载Squid for Windows版本,下载地址如下(ZIP文件名称:squid-27STABLE4-binzip),可以把这个文件下载到桌面,这样好找好操作。
Squid是Linux/Unix下著名的代理服务器软件,很多商业版本的代理服务器都是基于Squid进行开发的
而最近才偶尔发现Squid原来也有For Windows的版本。虽然此版本不是Squid项目官方发布的For Windows版,但是从发布的版本记录可以看出,此版本的维护者还是很负责任的。希望在Windows平台下搭建代理服务器的同学不妨试用一下。
2) 这步是解压文件,将刚才下载下来的ZIP文件(squid-27STABLE4-binzip)复到到C盘的根目录,然后在这个文件上点击鼠标右 键,选择“解压到squid-27STABLE4-bin”命令,即可在C盘根目录生成一个squid文件夹。这样的话,Squid for Windows版本就被“安装”到您的计算机中了。注意:尽量不要修改路径和文件夹名,尽量放在C盘根目录,文件夹名不要改,就叫squid,因为 Squid for Windows默认安装位置就是C:\squid,这点大家要谨慎。如果您要修改路径和文件夹名的话那得修改squid里面很多配置的,相当麻烦。
3)开始-运行-cmd,打开窗口后,按下图在DOS命令行下输入命令。
4) 关闭DOS窗口,回到桌面。进入我的电脑-C盘,双击打开squid文件夹,双击打开squidconf文件,对这个文件进行配置编辑。按 Ctrl+F,输入acl Safe_ports port 777,回车。然后在# multilinghttp后面按回车,增加一个空格,写入内容如下图所示。
5)再按Ctrl+F输入http_accessdeny CONNECT,回车,找到查找内容。在SSL_ports后按回车增加2个空行,输入内容请看下图所示。
6)找到# cache_mem 8 MB这句删掉前面的#号将默认的8修改到需要的大小,这里的数值应视具体的机器可用内存而定,应在内存允许的情况下尽量地设置的大一些以提高代理服务器性能,但不能让代理服务器的缓存大小影响本机器的性能。如下图操作即可。
7)设置hostname,请按下图操作。
8)按Ctrl+S保存对squidconf文件的编辑,然后关闭即可。
9)开始-运行-cmd,输入如下3条命令。
cd c:\squid\sbinsquid -i
squid -z
squid
10)配置完毕。
到这里,squid部分就搭建成功了
下面开始做域名解析
打开目录C:\WINDOWS\system32\drivers\etc
用记事本打开hosts编辑并保存
611746374 cdnjb51net cdnjb51cn
(这个IP是指您的主服务器IP,不是CDN机器的IP)
squid is a high-performance proxy caching server for web clients, supporting FTP, gopher, and HTTP data objects Unlike traditional caching software, squid handles all requests in a single, non-blocking, I/O-driven process
squid keeps meta data and especially hot objects cached in RAM, caches DNS lookups, supports non-blocking DNS lookups, and implements negative caching of failed requests
squid supports SSL, extensive access controls, and full request logging By using the lightweight Internet Cache Protocol, squid caches can be arranged in a hierarchy or mesh for additional bandwidth savings
squid consists of a main server program squid, a Domain Name System lookup program dnsserver, some optional programs for rewriting requests and performing authentication, and some management and client tools When squid starts up, it spawns a configurable number of dnsserver processes, each of which can perform a single, blocking Domain Name System (DNS) lookup This reduces the amount of time the cache waits for DNS lookups
0条评论