如何在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
〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
〉另外一个功能就是作为反向代理服务器实现负载均衡
以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
1)环境:
a 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );
b nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。
c 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127001:80)仅仅包含一个静态页面indexhtml;
后台的两个apache服务器(分别为localhost:80和1583770143:80),一台根目录放置phpMyAdmin文件夹和testphp(里面测试代码为print “server1“;),另一台根目录仅仅放置一个testphp(里面测试代码为 print “server2“;)。
2)针对不同请求 的负载均衡:
a 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginxconf中修改:
复制代码 代码如下:
location ~ \php$ {
proxy_pass 1583770143:80 ;
}
〉 这样当客户端访问localhost:8080/indexhtml的时候,前端的nginx会自动进行响应;
〉当用户访问localhost:8080/testphp的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \php$(表示正则表达式匹配以php结尾的文件,详情参看location是如何定义和匹配的 http://wikinginxorg/NginxHttpCoreModule) ,nginx服务器会自动pass给 1583770143的apache服务器了。该服务器下的testphp就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginxconf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127001:80 ;
}
location ~ \php$ {
proxy_pass 1583770143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127001:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/testphp 的话,则会被pass到1583770143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
〉如果用户访问静态页面indexhtml,最前端的nginx直接进行响应;
〉如果用户访问testphp页面的话,1583770143:80 的Apache进行响应;
〉如果用户访问目录phpMyAdmin下的页面的话,127001:80 的Apache进行响应;
3)访问同一页面 的负载均衡:
即用户访问http://localhost:8080/testphp 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127001:80(包含testphp页面但是打印server1),另一台是虚拟机的1583770143:80(包含testphp页面但是打印server2)。
b 因此重新配置nginxconf为:
〉首先在nginx的配置文件nginxconf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127001:80 ;
server 1583770143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样的话,如果访问http://localhost:8080/testphp 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127001:80;或者1583770143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127001:80 weight=5;
server 1583770143:80 ;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问testphp代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问testphp页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
你做的是透明代理还是传统的代理!如果是传统的代理,那么客户机浏览器的要设置代理:ip为squid内网ip,端口如果没改为3128!如果是透明代理,那么无需指定客户机浏览器无需指定代理!但是要能DNS解析,这是个前提,因为squid只代理80端口,iptables要指向本机的3128端口!具体为:iptables -t nat -I PREROUTING -s 你的内网Ip网段 -p tcp --dport 80 -i 内网网卡(如:eth0) -j REDIRECT --to-ports 3128 前提是客户机一定要能dns解析,你可以尝试在squid上搭建dns缓存服务器!设置forwarders 指向公网dns做解析!然后客户机的dns指向squid内网ip即可,当然named服务必须监听内网ip!一切的前提是你的代理能上网!我qq532168079,有问题加我!
一步一步教你架构linux服务器?
Linux服务器的部署,配置,搭建步骤:
1准备:
11jdk18:jdk-8u11-linux-x64targz。
tomcat:apache-tomcat-8039-windows-x64zip。
12先安装个18的jdk,注意是linuxforjdk,要不然可不行。
然后新建一个java文件夹在根目录的(这里的根目录要通过cd再接/usr/进入,而不是home/xxx,可以通过pwd查看当前所在路径)/usr/下,用来放置解压后的jdk文件,这里因为后缀名是targz所以直接用tar-xf命令解压。
2配置:
21配置JDK的环境变量:到/etc/文件夹找到profile文件,通过文件编辑命令viprofile在文件的末尾加上变量参数:
JAVA_HOME=/usr/java/jdk180_11
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=:$JAVA_HOME/jre/lib/rtjar:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar
22把下好的tomcat解压到自定义的一个文件夹里了,我的是home/pengyy/tomcat/下,到config文件里修改一下端口号,vi命令编辑serverxml,里面后来启动的时候8005那个端口有冲突,我直接改了8088,然后又把http请求的端口改成了8001,OK,tomcat配置完成,没什么过多的步骤。
23将一个完成的web项目打成war包,放在tomcat下的webapps里解压。
24进入到tomcat下的bin目录,输入命令启动:/startsh,终止命令/shutdownsh。
可以查看日志,去tomcat的logs目录底下查看catalinaout日志文件,可以通过cat查看文件命令,也可以tail-f(倒数多少行可以为数字)catalinaout来查看。
如果端口号被占用,可以用命令lsof-i:端口号来查看端口号被占用的进程号,或者停止该进程,或者修改tomcat的端口号都可以。
而当你不确定是否终止了哪个项目的时候,可以通过输入命令ps-ef|grepjava来查看一下是否有在运行的项目,通过kill-9进程号就可以干掉哪个正在运行的项目了。
最后通过ifconfig或者ip命令获取虚拟机的Ip地址,在主机上通过ip+端口号+项目根路径的方式访问即可。
linux服务器,用centOS还是UbuntuServer更好一点?
linux服务器系统多使用CentOS、uBuntu、Gentoo、FreeBSD、Debian。服务器操作系统应该选择Ubuntu还是CentOS,CentOS目前市场占有率第一。
根据Linux服务器搭建的环境来选择:
nginx+php+mysql选择freebsd
tomcat+jsp+orcal选择ubuntu
apache+php+mysql选择centos
如果没有专门的服务器运维人员,Ubuntu更合适,根据VPS服务商统计,超过75%都在用Ubuntu/Debian,用CentOS的不足20%。
57%ofdeploymentsareUbuntu
如何用Linux设置代理服务器?
你虚拟机网络设置正常的情况下要通过桥接网络的代理服务器上网设置在profile文件中设置相关环境变量#vi/etc/profilehttp_proxy=1921681091:3128#分别指定http、https、ftp协议使用的代理服务器地址https_proxy=1921681091:3128ftp_proxy=1921681091:3128no_proxy=192168100#访问局域网地址(192168200/24网段)时不使用代理,可以用逗号分隔多个地址exporthttp_proxyhttps_proxyftp_proxyno_proxy保存退出,注销重新登陆系统即可生效。
学LINUX服务器哪本书比较好?
Linux程序设计(第三版)以下摘自豆瓣:------内容······时至今日,Linux系统已经从一个个人作品发展为可以用于各种关键任务的成熟、高效和稳定的操作系统,因为具备跨平台、开源、支持众多应用软件和网络协议等优点,它得到了各大主流软硬件厂商的支持,也成为广大程序设计人员理想的开发平台。
本书是Linux程序设计领域的经典名著,以简单易懂、内容全面和示例丰富而受到广泛好评。中文版前两版出版后,在国内的Linux爱好者和程序员中也引起了强烈反响,这一热潮一直持续至今。本书是国内读者翘首以待的第4版(者注:第3版已经够用了~),此次新版内容组织更加严谨,译者更是细心雕琢,保留了这部权威著作的原汁原味。对Linux所提供的功能全面而准确的阐述,以及贯穿全书的示例程序体验,使本书不仅成为初学者的最佳Linux程序设计指南,而且是中高级程序员不可或缺的参考书。Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器。这样既浪费时间又浪费精力,那不没办法的事。而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步。wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。下面我们以实例的形式说明怎么使用wget。
1、使用wget下载单个文件
以下的例子是从网络下载一个文件并保存在当前目录
wget http://cnwordpressorg/wordpress-31-zh_CNzip
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
2、使用wget -O下载并以不同的文件名保存
wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称downloadphpid=1080保存
wget http://wwwcentosbz/downloadid=1
即使下载的文件是zip格式,它仍然以downloadphpid=1080命令。
正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:
wget -O wordpresszip http://wwwcentosbz/downloadphpid=1080
3、使用wget –limit -rate限速下载
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
wget –limit-rate=300k http://cnwordpressorg/wordpress-31-zh_CNzip
4、使用wget -c断点续传
使用wget -c重新启动下载中断的文件:
wget -c http://cnwordpressorg/wordpress-31-zh_CNzip
对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。
5、使用wget -b后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。
wget -b http://cnwordpressorg/wordpress-31-zh_CNzip
Continuing in background, pid 1840
Output will be written to `wget-log’
你可以使用以下命令来察看下载进度
tail -f wget-log
6、伪装代理名称下载
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。
wget –user-agent=”Mozilla/50 (Windows; U; Windows NT 61; en-US) AppleWebKit/53416 (KHTML, like Gecko) Chrome/100648204 Safari/53416″ 下载链接
7、使用wget –spider测试下载链接
当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。
wget –spider URL
如果下载链接正确,将会显示
wget –spider URL
Spider mode enabled Check if remote file exists
HTTP request sent, awaiting response… 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled — not retrieving
这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误
wget –spider url
Spider mode enabled Check if remote file exists
HTTP request sent, awaiting response… 404 Not Found
Remote file does not exist — broken link!!!
你可以在以下几种情况下使用spider参数:
定时下载之前进行检查
间隔检测网站是否可用
检查网站页面的死链接
8、使用wget –tries增加重试次数
如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。
wget –tries=40 URL
9、使用wget -i下载多个文件
首先,保存一份下载链接文件
cat filelisttxt
url1
url2
url3
url4
接着使用这个文件和参数-i下载
wget -i filelisttxt
10、使用wget –mirror镜像网站
下面的例子是下载整个网站到本地。
wget –mirror -p –convert-links -P /LOCAL URL
–miror:开户镜像下载
-p:下载所有为了html页面显示正常的文件
–convert-links:下载后,转换成本地的链接
-P /LOCAL:保存所有文件和目录到本地指定目录
11、使用wget –reject过滤指定格式下载
你想下载一个网站,但你不希望下载,你可以使用以下命令。
wget –reject=gif url
12、使用wget -o把下载信息存入日志文件
你不希望下载信息直接显示在终端而是在一个日志文件,可以使用以下命令:
wget -o downloadlog URL
13、使用wget -Q限制总下载文件大小
当你想要下载的文件超过5M而退出下载,你可以使用以下命令:
wget -Q5m -i filelisttxt
注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
14、使用wget -r -A下载指定格式文件
可以在以下情况使用该功能
下载一个网站的所有
下载一个网站的所有视频
下载一个网站的所有PDF文件
wget -r -Apdf url
15、使用wget FTP下载
你可以使用wget来完成ftp链接的下载。
使用wget匿名ftp下载
wget ftp-url
使用wget用户名和密码认证的ftp下载
wget –ftp-user=USERNAME –ftp-password=PASSWORD url
wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:
(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
(4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
(5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的;
wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
1、下载整个http或者ftp站点。
wget http://placeyoururl/here
这个命令可以将http://placeyoururl/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。
wget -r http://placeyoururl/here
这 个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同 样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。
要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://placeyoururl/here
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robotstxt并按robotstxt的规定来执行。
2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget -c http://theurlof/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。
3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件downloadtxt,然后用命令:wget -i downloadtxt
这样就会把downloadtxt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget -m –reject=gif http://targetwebsite/subdirectory
表示下载http://targetwebsite/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,–reject=LIST拒绝接受的文件类型。
5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。
6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个wgetrc文件。文件中可以设置代理服务器:
http-proxy = 111111111111:8080
ftp-proxy = 111111111111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
这两个参数。
使用参数–proxy=on/off 使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。
附录:
命令格式:
wget [参数列表] [目标软件、网页的网址]
-V,–version 显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个 “wgetrc”命令
-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;
-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O –output-document=FILE下载文件保存为别的文件名
-nc, –no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理
-nd,–no-directories 不建立目录
-x,–force-directories 强制建立目录
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
-r,–recursive 下载整个网站、目录(小心使用)
-l,–level=NUMBER 下载层次
-A,–accept=LIST 可以接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST可以接受的域名
–exclude-domains=LIST拒绝的域名
-L,–relative 下载关联链接
–follow-ftp 只下载FTP链接
-H,–span-hosts 可以下载外面的主机
-I,–include-directories=LIST允许的目录
-X,–exclude-directories=LIST 拒绝的目录
中文文档名在平常的情况下会被编码, 但是在 –cut-dirs 时又是正常的,
wget -r -np -nH –cut-dirs=3 ftp://host/test/
测试txt
wget -r -np -nH -nd ftp://host/test/
%B4%FA%B8%D5txt
wget “ftp://host/test/”
%B4%FA%B8%D5txt
由 於不知名的原因,可能是为了避开特殊档名, wget 会自动将抓取档名的部分用 encode_string 处理过, 所以该 patch 就把被 encode_string 处理成 “%3A” 这种东西, 用 decode_string 还原成 “:”,并套用在目录与档案名称的部分,decode_string 是 wget 内建的函式。
wget -t0 -c -nH -x -np -b -m -P /home/sunny/NOD32view/ http://downloads1kaspersky-labscom/bases/ -o wgetlog
使用透明代理有几个好处。首先,对最终用户来说,透明代理可以改善上网浏览体验,因为缓存了经常访问的网站内容,同时给他们带来的配置开销最小。对管理员来说,透明代理可用于执行各种管理政策,比如内容/URL/IP过滤和速率限制等。
代理服务器充当客户端和目的地服务器之间的中介。客户端将请求发送到代理服务器,随后代理服务器评估请求,并采取必要的动作。在本教程中,我们将使用Squid搭建一个Web代理服务器,而Squid是一种健壮的、可定制的、稳定的代理服务器。就个人而言,大概一年来我管理着一台拖有400多个客户端工作站的Squid服务器。虽然平均而言我大概一个月就要重启一次服务,但处理器和存储使用率、吞吐量以及客户端响应时间都表现不错。
我们将配置Squid以获得下列拓扑结构。CentOS/RHEL设备有一块网卡(eth0)连接到专有局域网,另一块网卡(eth1)则连接到互联网。
Squid的安装
想使用Squid搭建透明代理系统,我们首先要添加必要的iptables规则。这些规则应该会帮助你开始上手,不过务必要确保它们与任何的现有配置没有冲突。
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
第一条规则将引起来自eth1(广域网接口)的所有出站数据包都有eth1的源IP地址(也就是启用NAT)。第二条规则将把来自eth0(局域网接口)的所有入站HTTP数据包(发往TCP 80)重定向至Squid侦听端口(TCP 3128),而不是直接将其转发到广域网接口。
我们使用yum,开始安装Squid。
# yum install squid
现在,我们将改动Squid配置,将其变成透明代理系统。我们将局域网子网(比如1010100/24)定义为有效的客户端网络。不是来自该局域网子网的任何流量将被拒绝访问。
# vim /etc/squid/squidconf visible_hostname proxyexampletst http_port 3128 transparent ## 定义我们的网络## acl our_network src 1010100/24 ## 确保我们的网络允许访问## http_access allow our_network ## 最后拒绝其他的所有流量## http_access deny all
现在我们开启Squid服务,确保它已被添加到启动项。
# service squid start # chkconfig squid on
鉴于Squid已搭建并运行起来,我们可以测试其功能了,为此只需监测Squid日志。从连接至该局域网的计算机访问任何URL,你应该会在日志中看到类似以下的内容。
# tailf /var/log/squid/accesslog 1402987348816 1048 10101010 TCP_MISS/302 752 GET http://wwwgooglecom/ - DIRECT/17319439178 text/html 1402987349416 445 10101010 TCP_MISS/302 762 GET http://wwwgooglecombd/ - DIRECT/17319478 94 text/html
据日志文件显示,IP地址为10101010的机器试图访问googlecom,Squid处理了这个请求。
一种最基本的Squid代理服务器现已准备就绪。在本教程的余下部分,我们将调整Squid的一些参数,以控制出站流量。请注意:这仅仅为了演示。实际的政策应加以定制,以满足你的具体要求。
准备工作
在开始配置之前,我们先明确几个要点。
Squid配置解析
在阅读配置文件时,Squid以一种自上而下的方式来解析文件。自上而下地解析规则,直到发现匹配为止。一旦发现匹配,该规则就被执行;其下面的其他任何规则将被忽视。所以,添加过滤规则的最佳实践就是,按下列顺序指定规则。
explicit allow
explicit deny
allow entire LAN
deny all
Squid重启与Squid重新配置
一旦Squid配置经过改动,Squid服务就需要重启。重启服务可能需要一段时间,有时要几分钟,长短取决于活动连接的数量。在这个期间,局域网用户无法访问互联网。想避免这种服务中断,我们可以使用下面这个命令,而不是使用“service squid restart”。
# squid -k reconfigure
该命令将允许Squid使用更新后的参数来运行,而不需要重启本身。
按照IP地址过滤局域网主机
在这个演示中,我们想要搭建这样的Squid:禁止拥有IP地址10101024的主机和IP地址10101025的主机访问互联网。为此,我们创建了一个文本文件“denied-ip-file”,里面含有所有被拒绝访问的主机的IP地址,然后将该文件添加到Squid配置中。
# vim /etc/squid/denied-ip-file 10101024 10101025 # vim /etc/squid/squidconf ## 首先我们创建访问控制列表(ACL),隔离被拒绝访问的IP地址##acl denied-ip-list src "/etc/squid/denied-ip-file" ##然后,我们应用ACL ## http_access deny denied-ip-list ## 明确拒绝## http_access allow our_network ## 允许局域网## http_access deny all ## 拒绝所有deny all ##
现在我们需要重启Squid服务。Squid将不再认可来自这些IP地址的请求。如果我们检查squid日志,就会发现来自这些主机的请求处于“TCP_DENIED”状态。
过滤黑名单中的网站
这个方法将只适用于HTTP。假设我们想阻止badsitecom和denysitecom,就可以将这两个网址添加到文件,并且将引用添加到squidconf。
# vim /etc/squid/badsite-file badsite denysite # vim /etc/squid/squidconf ## ACL定义##acl badsite-list url_regex "/etc/squid/badsite-file" ## ACL 应用## http_access deny badsite-list http_access deny denied-ip-list ## 之前设置,但这里不起作用## http_access allow our_network http_access deny all
请注意:我们使用了ACL类型“url_regex”,这将与所请求的URL中的“badsite”和“denysite”这两个词相匹配。也就是说,凡是在URL中含有“badsite”或“denysite”(比如badsiteorg、newdenysitecom或otherbadsitenet)的请求一律被阻止。
合并多个ACL
我们将创建一个访问列表,阻止IP地址为101010200的客户端和IP地址为101010201的客户端访问custom-block-sitecom。其他任何客户端都能够访问该网站。为此,我们将首先创建一个访问列表以隔离这两个IP地址,然后创建另一个访问列表以隔离所需的网站。最后,我们将同时使用这两个访问列表,以满足要求。
# vim /etc/squid/custom-denied-list-file 101010200 101010201 # vim /etc/squid/custom-block-website-file custom-block-site # vim /etc/squid/squidconf acl custom-denied-list src "/etc/squid/custom-denied-list-file" acl custom-block-site url_regex "/etc/squid/custom-block-website-file" ## ACL应用 ## http_access deny custom-denied-list custom-block-site http_access deny badsite-list ## 之前设置,但这里不起作用## http_access deny denied-ip-list ## 之前设置,但这里不起作用## http_access allow our_network http_access deny all # squid -k reconfigure
被阻止的主机现在应该无法访问上述网站了。日志文件/var/log/squid/accesslog应该含有相应请求的“TCP_DENIED”。
设定最大下载文件大小
Squid可以用来控制最大的可下载文件大小。我们想把IP地址为101010200的主机和IP地址为101010201的主机的最大下载大小限制在50MB。我们之前已经创建了ACL“custom-denied-list”,以隔离来自这些源地址的流量。现在,我们将使用同一个访问列表来限制下载文件大小。
# vim /etc/squid/squidconf reply_body_max_size 50 MB custom-denied-list # squid -k reconfigure
建立Squid缓存层次体系
Squid支持缓存的方式是,将经常访问的文件存储在本地存储系统中。设想一下:你的局域网上有100个用户在访问googlecom。要是没有缓存功能,就要为每一个请求单独获取Google标识或涂鸦。Squid可以将标识或涂鸦存储在缓存中,以便从缓存来提供。这不仅改善了用户感觉得到的性能,还减少了带宽使用量。这可以说是一举两得。
想启用缓存功能,我们可以改动配置文件squidconf。
# vim /etc/squid/squidconf cache_dir ufs /var/spool/squid 100 16 256
数字100、16和256 有下列含义。
•为Squid缓存分配100 MB存储空间。如果你愿意,也可以加大所分配的空间。
•16个目录(每个目录里面含有256个子目录)将用于存储缓存文件。这个参数不应该改动。
我们可以通过日志文件/var/log/squid/accesslog来证实Squid缓存是否被启用。如果缓存成功命中,我们应该会看到标有“TCP_HIT”的项。
总而言之,Squid是一种功能强大的、基于行业标准的Web代理服务器,被全球各地的系统管理员们广泛使用。Squid提供了简易的访问控制功能,可用于管理来自局域网的流量。它既可以部署到大企业网络中,也可以部署到小公司网络中。
对于http及https类型的请求,可以通过设置http_proxy
方法是export http_proxy=http://proxyaddress:port
新版的Ubuntu已经不支持export http_proxy就能给apt-get设置代理的方式了。这种方法要用到/etc/apt/文件夹下的aptconf文件。注意: 某些情况下,系统安装过程中没有建立apt配置文件。下面的操作将视情况修改现有的配置文件或者新建配置文件。
sudo vi /etc/apt/aptconf
在您的aptconf文件中加入下面这行(根据你的实际情况替换yourproxyaddress和proxyport)。
Acquire::http::Proxy "http://proxyaddress:port";
0条评论