《毕业设计(论文)基于Linux的Squid代理服务器的架设.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于Linux的Squid代理服务器的架设.doc(32页珍藏版)》请在三一办公上搜索。
1、本科毕业论文 基于Linux的Squid代理服务器的架设学 院: 计算机与信息工程学院专 业: 计算机科学与技术学 号: 111013632姓 名: 指导教师: 职 称: 论文提交日期:二一五年六月 摘 要做为眼下广受青睐的操作系统,Linux已经愈来愈受到世人的关注。尽管当前Linux包含的软件还不是很丰富,替代WINDOWS作为一般PC机操作系统还为时过早,但是在服务器领域,Linux的稳定性,可操作性一点也不输于任何操作系统,并且也有良好的软件支持 。Squid就是其中之一。Linux加Squid的配合做为代理服务器,性能远远超过我们所想象的。 Squid是一个缓存internet数据的
2、一种服务,它接收用户的下载请求,并主动处理下载的数据。换句话说,当一个用户要下载一个主页时,它向Squid发出一个请求,要Squid替它下载,而后Squid连接所申请的网站并请求该主页,紧接着把该主页传给用户,同时保存一个备份,当别的用户请求一样的页面时,Squid把保留的备份立刻传给用户,使用户感觉速度相当快。关键词: squid linux 代理AbstractAs a popular operating system, Linux has increasingly attracted the attention of the world. Despite the current Linu
3、x includes software is not very rich, alternative windows as a general operating system of PC is still too early, but in the field of the server, the stability and operability of Linux does not lose to any operating system, and also have good software support.Squid is one of them.Linux plus Squid as
4、 the proxy server, performance is far more than we imagined.Squid is a service that caches Internet data, it receives the users download request, and automatically downloads the data.In other words, when a user wants to download a page, it issues a request to the squid, and ask squid for download it
5、, then squid connected web site and requests the page, then pass the page to the user, at the same time, squid save a backup page, when other users request a same page, squid immediately pass the backup page to the user, makes user feels very fast.Key words: Squid Linux Agent 目 录1 引言11.1项目开发背景11.2 项
6、目设计的意义11.3 linux简介21.4代理服务器的作用及工作原理21.5 Squid代理服务器简介32 LINUX下SQUID代理服务器的安装与配置42.1 Squid代理服务器的安装42.2 Squid代理服务器的基本配置52.3 初始化Squid112.4 启动和停止Squid代理服务器133 SQUID代理服务器的高级配置153.1 普通代理的实现153.2 透明代理的实现193.3 反向代理的实现223.4 通过反向代理实现负载均衡25总结25致 谢27参考文献281 引言1.1 项目开发背景 Linux是近几年一款别树一帜的操作系统。凭借公开的源代码、强大兴盛的网络功能和大量的
7、无偿资源受到业界的一致好评。在全球各地不计其数的程序员共同的努力下逐渐完善该系统,其目的是让个人和企业享受到免费的不受商业化影响的UNIX兼容产物。Linux为用户供应了十分完善的、不容忽视的网络功能。Linux无偿提供了海量支持Internet的软件,Internet是在UNIX领域中创建并郁勃起来 。 由于互联网技术的不断发展和拓宽,谨慎选择个人和企业应用的操作系统逐渐走入人们的视线。人们不停地追求把性能最优、安全性最优、价钱最廉价的操作系统安装到自己的计算机上。因此,Linux成了流行的操作系统。 代理服务器的主要思想是:当做为客户端的人们想要向服务器访问资源时,服务器为了优化客户的体验
8、率将立即给客户端下发它需要的数据,但由于这些服务器大部分都是远程服务器,数据传输也就需要花费比较长的时间,一旦请求此数据的用户很多,就容易造成网络堵塞。在这种情况下,代理服务器的作用就突显出来了,代理服务器一方面可以处理客户端的请求,另一方面也可以代理客户端来响应服务器。1.2 项目设计的意义 随着人们正常生活水平的提升,互联网技术的不断发展,宽带进入了家家户户,网络用户的数量急剧膨胀,因此访问的连接也在快速整长,IP地址数量严重缺乏,服务器的安全问题也不得不重视起来。这些问题都可以依靠架设代理服务器来解决。用户通过架设的代理服务器来访问自己所需要的资源,可以有效的解决IP地址缺乏的问题,当然
9、通过代理服务器可以有效的在内部网络和外部网络之间架构iptables,就能解决网络安全问题。1.3 Linux简介 Linux是林纳斯托瓦兹在不满足minix系统的功能下,自己研制的一款操作系统,当时他只是做为一款实验操作的系统,并有着随时中断此系统的思想,完全没有想到Linux会发展到今天这种广受欢迎的地步。不说其他功能,在我自己学习这项系统的过程中,有一项功能深深的感到强大,就是逻辑卷。逻辑卷的应用不在受限于硬盘的不足时不得不更换硬盘,而一旦更换硬盘,数据一定个会受到影响,但逻辑卷就解决了这个问题,因为它有一个在线扩容的功能,单单因为这项功能就吸引了大部分的企业。Linu的诞生是服务器界的
10、福音。1.4 代理服务器的作用及工作原理 大家都知道本机在未设置的情况下不能直接访问国外的站点,而且网络速度也很慢,通常我们访问网站都是直接与目的主机相连,如果存在代理服务器,我们就可以先河代理服务器进行连接,然后代理服务器把我们的请求(比如说我们想到得到哪个网页)进行回应,一是代理服务器在自身的Cache上查找,二是代替我们想上级请求数据,这样就能够提高访问速度了。同时代理服务器能够作为一个隔离内网与外网的防火墙,而且能提供记录传输信息和监控网络的功效,强化局域网的安全性等。它的主要作用有以下几点:(1)共享网络;(2)加快访问速度,节约通信带宽;(3)防止内部主机受到攻击;(4)限制用户访
11、问,完善网络管理。 代理服务过程简单来说可以分为四步。第一步:用户发送的请求被代理服务器接受到;第二步:代理服务服务器把用户的请求转发给真正的服务器;第三步:真正的服务器对代理服务器做出响应;第四步:代理服务器把真正服务器做出的响应返回给用户。下面我们把一个用户发送请求web数据的过程为例子深入了解一下代理服务器工作的过程。如图1.1所示。 图 1.1 Squid代理服务器工作原理 当架设完代理服务器后,正常启动服务,这时服务会监听在配置文件中配置的端口号,当用户向代理服务器发出访问web服务器资源的申请时,代理服务器就会监听到这一信息,代理服务器就会创建一个子进程来响应用户的请求,而主进程还
12、是会继续监听改端口号。已经创建的子进程就会与用户进行连接,开始对用户的请求进行分析,按照设置的规则,检测改请求是否符合该规则,如果符合,就在代理服务器的Cache中查询是否有用户所请求的信息,如果有就直接下发资源。没有的话代理服务器刚才创建的子进程就会向真正的服务器发出请求,真正的web服务器就会响应改子进程,代理服务器再将该响应返回给用户,并对资源做保留。其他客户端的请求过程和上面一致。1.5 Squid代理服务器简介 Squid代理服务器是针对web的高性能代理缓冲服务器,它可以对用户的访问进行加速。它可以在向上级申请一次数据后响应用户的请求并保留数据,当用户再一次向他请求这个数据时,sq
13、uid代理服务器就不会向上级申请,直接从自己的Cache中提取返回给用户。Squid代理服务器的一般工作模式如下:(1)当用户向squid代理服务器申请数据时,而squid没有用户所想要的资源时,squid便会先向友邻的Squid服务器请求数据数据。如果友邻的squid服务器也没有,就直接向上级请求数据;(2)Squid服务器向上级请求数据,然后等待上级响应请求。如果上级有数据,则给出数据;如果没有数据,则上级到Internet中查找;(3)如果用户请求的squid没有上一级时,Squid代理服务器自己到Internet中查询;(4)如果这三者都找不到数据,则向客户端报告无法取到数据。 Squ
14、id代理服务器是开源的,响应用户的速度快,大大降低了Internet的堵塞率。Squid还可以在内网和外网之间建立一个防火墙,有效的提高了网络的安全性。Squid代理服务器的种类有三种,分别是普通代理服务器、透明代理服务器、反向代理服务器。 普通代理服务器可以将静态的网页缓存到自己的Cache,当缓存的网页被用户访问的时候,浏览器可以直接从普通代理服务器的Cache中获得请求的数据,而不是向真正的服务器请求数据,这样就大大减少了IP地址,也减少了网络的堵塞率,当然用户的访问速度也得到了提升。 透明代理搭建出来之后,用户访问的时候根本意识不到这是代理服务器,用户会把代理服务当作他想访问的真正服务
15、器。其实是防火墙作为内部网络和外部网络通信的桥梁。在整个过程中,无论是用户还是真正的服务器都不知道他们其实是在和防火墙就行的通信,这样就大大加强了网络的安全性。反向代理大家可能听的比较少,但是web服务器加速器相信大家都听说,其实web服务器加速器就是反向代理服务器。典型的结构如下图1.2所示。 图1.2 反向代理服务器结构示意图2 Linux下Squid代理服务器的安装与配置2.1 Squid代理服务器的安装 在Linux的终端输入以下命令可查看:rpm qa | grep squid命令执行结果如下图2.1所示。 图2.1 squid版本号出现以上结果表示本机Squid服务器已安装,它的版
16、本是3.1.10-16.el6.x86_64。如果系统未安装Squid,在Linux的终端下输入以下命令进行安装: yum -y install squid 使用安装命令进行安装。Squid程序将安装在/user/sbin目录中,其配置文 件squid.conf则安装在/etc/squid目录下。2.2 Squid代理服务器的基本配置/etc/squid/squid.conf是Squid代理服务器的主要配置文件。由于该文件内容较多,不便于查看和编辑,可以将其复制出一个副本,然后清空源文件,其主要配置内容如下:(1)Network Options(网络设置选项) http_port 192.16
17、8.1.101:8080#这一句是用于设置Squid监听的IP地址和端口号,默认3128icp_port 端口号 和其它squid发送和接收ICP查询时监听的端口,0表示禁止htcp_prot 端口号同其它相邻的缓存服务器之间发送和接收HTCP查询时监听的端口,0表示禁用tcp_outgoing_address IP地址采用HTCP和CARP方式同其它服务器通信,默认IP地址为255.255.255.255(2)多缓存服务器设置选项cache_peer hostname type http_port icp_port options指定网络中其它的缓存代理服务器,默认为none。Hostnam
18、e:另一台缓存服务器的主机名Type: parent/sibling /multicast(父/同级/多播)http_port:目的服务器的http端口icp_port:目的服务器的ICP端口options: - proxy-only:仅去获取数据,但不在本地缓存- default:默认的父服务器dead_peer_timeout N seconds设置Squid在确定父(同)级缓存服务器不可用之前的等待队列时间(3)缓存大小设置选项cache_swap_low(percent,0-100)缓存对象交换的最低点cache_swap_high(percent,0-100)缓存对象交换的最高点ma
19、ximum_object_size缓存对象的最大大小minimum_object_size缓存对象的最小大小maximum_object_size_in_memory在内存中缓存的最大的对象大小ipcache_size 4096:fqdncache_size 4096(4)日志文件路径及CACHE的目录设置选项LRU:默认,最近最少使用算法heap LRU:堆LRUcache_dir 类型 路径 大小(M) 一级子目录 二级子目录系统使用的存储类型cache_access_log /var/log/squid/access.logaccess.log日志文件路径cache_log /var/l
20、og/squid/cache.log缓存日志文件的目录和文件emulate_httpd_log on/off激活仿真HTTP格式的日志mime_table /etc/squid/mime.confmime文件路径pid_filename /var/ran/squid.pid指定pid文件和路径ftp_user 用户名域名指定匿名FTP密码ftp_list_width 数字 指定FTP列表的文件名长度ftp_passive on/off以被动模式(on)/主动模式(off)dns_children 数字指定本地默认启动DNS查询进程数dns_nameservers IP地址DNS服务器地址dis
21、kd_program /usr/lib/squid/diskd磁盘管理程序unlinkd_program usr/lib/squid/unlinkd删除文件程序pinger_program /usr/lib/squid/ping程序编译时指定:-enable-icmp optionredirect_program noneURL重点向程序redirect_children 数字重点向进程数auth_param 类型 program/children/credentialsttl/realm 值用户认证配置选项(5)调整Cache的选项request_header_max_size 数字(KB)
22、最大http请求头request_body_max_size 数字(KB)最大http请求数据内容reply_body_max_size 数字(KB)最大返回数据,可以用来限制用户下载的数据大小,避免一个用户长时间占用reference_age 数字LRU算法中指定LRU时间quick_abort_min 数字(KB)断点续传最小值quick_abort_max 数字(KB)断点续传最大值quick_abort_pct 数字(percent)超过值认为续传成功negative_ttl 数字 minutes/hours/seconds否定回答TTLpositive_dns_ttl 数字 minu
23、tes/hours/secondsDNS肯定回答TTLrange_offset_limit 数字 KB/MB/Bytes请求SQUID预取数据的大小(6)定义超时的选项connect_timeout:SQUID等待客户请求的服务器回应的时间长度peer_connect_timeout:一个对等的缓存服务器的TCP连接超时时间client_lifetime:客户端同代理服务器TCP连接的最大时间长度read_timeout:读入数据超时request_timeout:客户端请求最大时间shutdown_lifetime:关闭squid缓存时间(7)定义访问控制的选项acl:定义一个访问列表格式:
24、acl aclname acltype string类型:(acltype)src:源地址dst:目标地址srcdomain:原(客户)名称dstdomain:目标名称time:时间(M星期一、T星期二、W星期三、H星期四、F星期五、A星期六、S星期天)url_regex-i:URL中的正则表达式匹配urlpath_regex-i:略去协议和主机名的正则表达式proxy_auth:通过外部程序进行用户验证maxconn:单IP最大连接数port:端口myip:本地IPsrcdom_regex -i:匹配客户名dstdom_regex -i:匹配目标名myport:我的端口proto:协议,ht
25、tp,ftp.method:方法, GET POSTbrowser:匹配User-Agent headerarp:匹配指定的MAC地址proxy_auth username:指定合法用户,用REQUIRED表示所有合法用户http_access:代理访问控制格式:http_access allow|deny ! acl_nameicp_access:icp访问控制格式:icp_access allow|deny !acl_namecache_peer_access:其它缓存服务器访问控制格式:cache_peer_access cache_host allow|deny !acl_name(8
26、)管理员参数选cache_mgr mail地址:管理员电子邮件cache_effective_user 用户名:运行身份cache_effective_group 组名:运行组身份(9) HTTPD加速选项httpd_accel_host 主机名/vitual:加速某服务器访问httpd_accel_port 端口号:加速服务器的对方端口httpd_accel_single_host on/off:多台服务器时设置offhttpd_accel_with_proxy on/off:即作为加速器,又作为WEB缓存服务器,设置为onhttpd_accel_uses_host_header on/of
27、f:为on,能支持不同的http协议(11)杂项logfile_rotate 0-9:日志轮换版本数append_domain 域名:默认域名tcp_recv_bufsize 数字(KB):TCP缓存区大小err_html_text 字符串:包含在错误消息中的文本deny_info:禁用时显示消息格式:deny_info err_page_name aclvisible_hostname 主机名错误消息中显示的服务器名称error_directory 路径:指定错误消息文件目录2.3 初始化Squid(1)初始化硬盘cache目录我们先将Squid安装好之后,配置其配置文件,为了使Squid能
28、够缓冲硬盘中的访问目标服务器的内容,在第一次运行Squid之前,或者我们在配置文件中修改了cache_dir设置后,我们都必须初始化硬盘cache目录。命令格式如下:rootlocalhost root# /usr/local/squid/sbin/squid -z初始化cache目录工作需要花费一些时间,这就取决了磁盘驱动器的速度和cache目录的数量和大小。(2)测试Squid当cache目录初始化后,可以重新启动Squid服务了,将日志记录重定向到标准错误。这样,我们就能轻易地定位任何错误或问题的位置,并且确认Squid是否成功启动。使用-N选项来保持Squid在前台始终运行,-d1选项
29、在标准错误里显示1级别的调试信息。rootlocalhost root# /usr/local/squid/sbin/squid -N -d1命令执行完后,查看目录/var/spool/squid的内容时,可以看到Squid已经根据配置文件的定义建立了目录结构,如图2.2所示。图2.2 硬盘缓冲区的目录结构2.4 启动和停止Squid代理服务器(1)启动代理服务器在通常情况下,我们将Squid以后台进程的方式运行(不出现在终端窗口里)。最容易的方法是执行如下命令:rootlocalhost root# /etc/init.d/squid start命令执行后出现Starting squid绿色
30、OK提示,表示启动服务成功。(2)停止代理服务器我们可以使用命令 squid -k interrupt,立即关闭Squid代理服务器,不用等待活动完成。命令如下:rootlocalhost root# /etc/init.d/squid stop命令执行后出现Stopping squid绿色OK提示,表示停止代理服务成功。当然停止Squid代理服务器不止这一种方法。还有就是最安全地停止Squid代理服务器的命令:squid -k shutdown以及运用kill+进程号的命令强制停止代理服务器的方法。(3)重新启动代理服务器重新启动命令rootlocalhost root# /etc/init
31、.d/squid restart命令执行后出现以下,则表示重新启动代理服务成果,如图2.3 图2.3 重新启动squid服务(4)自动启动代理服务器当我们想在系统启动而自动启动代理服务器的时候,可以在终端执行“ntsysv”命令启动永久服务配置程序,找到“Squid”服务,在其前面按空格变成星号,然后选择“确定”,如图2.3所示。 图 2.4 自动启动代理服务配置3 Squid代理服务器的高级配置3.1 普通代理的实现普通代理代理服务是标准的、传统的代理服务器。客户机需要在浏览器中设定代理服务器的地址、端口。Client: 192.168.122.11Server: 192.168.122.2
32、2Web: 192.168.122.33(1) 配置server端 rootnode2 # yum install squid 安装squidrootlocalhost # vim /etc/squid/squid.conf 修改配置文件 . . .acl localnet src 10.0.0.0/8 # RFC1918 possible internal networkacl localnet src 172.16.0.0/12 # RFC1918 possible internal networkacl localnet src 192.168.0.0/16 # RFC1918 poss
33、ible internal networkacl localnet src fc00:/7 # RFC 4193 local private network rangeacl localnet src fe80:/10 # RFC 4291 link-local (directly plugged) machinesacl test src 192.168.122.0/24 标明地址. . .# Only allow cachemgr access from localhosthttp_access allow testhttp_access allow manager localhostht
34、tp_access deny manager. . .# Squid normally listens to port 3128http_port 8080 标明端口. . .配置文件配置完成后,重新启动服务。rootnode2 # service squid restartStopping squid: . OK Starting squid: . OK (2)在客户端 设置 打开火狐浏览器 rootnode1 # firefox & 1 5591 点击Edit ,选择Preferences,再选择Advanced 然后点击Network 出现以下界面,图3.1 图3.1 设置浏览器(1)选
35、择Setting,进行如下设置,设置代理服务器即server的IP地址和在配置文件中设置的端口号,如图3.2。 图3.2 设置浏览器(2)(3)设置Web端 在web端建立一个简单的网页,以便观察现象 在Web终端输入如下命令,建立简单网页: echo “我是高新宾” /var/www/html/index.html(4)在客户端观察现象在客户端client上打开火狐浏览器,访问web,可得web上的简单网页,如图3.3 rootnode1 # firefox & 1 5591 图3.3 测试结果分别查看客户端、server代理服务器、web的数据包交流方向。Client: 图3.4 Clie
36、nt端数据包走向Server:: 图3.5 server端数据包走向Web: 图3.6 web端数据包走向根据数据包走向,得出client是和server进行数据包交流的,因此server代理服务器正式实现。3.2 透明代理的实现 透明代理就是客户机不需要在浏览器上设置代理配置的情况下通过Squid代理服务器上网,透明代理搭建出来之后,用户访问的时候根本意识不到这是代理服务器,用户会把代理服务当作他想访问的真正服务器。其实是防火墙作为内部网络和外部网络通信的桥梁。在整个过程中,无论是用户还是真正的服务器都不知道他们其实是在和防火墙就行的通信,这样就大大加强了网络的安全性。简单示意图:Clien
37、t-Squid(+Route)-Apache192.168.122.11 192.168.122.22 2.2.2.2 2.2.2.3 (1)配置Squidrootnode2 # vim /etc/squid/squid.conf 修改配置文件. . .# Squid normally listens to port 3128http_port 8080 transparent. . .rootnode2 # service squid restart 重启服务Stopping squid: . OK Starting squid: . OK rootnode2 # echo 1 /proc/
38、sys/net/ipv4/ip_forward 在Squid上开转发(2)配置iptables端口重定向是iptables在此所起的主要作用,执行下面的命令将所有进入eth0网络接口的80端口的Web服务的申请转发到8080端口,交由Squid代理处理,命令如下:rootnode2 # iptables -t nat -A PREROUTING -s 192.168.122.0/24 -i eth0 -p tcp -dport 80 -j REDIRECT -to-port 8080(3)配置client 在client上需要添加一条寻路rootnode1 # ip route add def
39、ault via 192.168.122.22(4) 在web上建一个简单网页,如图3.7 图3.7 简单网页建立(4)观察现象 rootnode1 # elinks -dump http:/2.2.2.3 图3.8 测试透明代理及web的数据包走向,如图3.9。 图3.9 透明代理web端数据包走向用client访问web,可以看到web的数据包走向是和squid进行的,透明代理至此实现。3.3 反向代理的实现 反向代理(Reverse Proxy)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的数据转给internet上请求连接的
40、客户端,此时代理服务器对客户端来说就是一个服务器。简单示意图: Web Server- Squid(+Route) -Client192.168.122.11192.168.122.22 2.2.2.2 2.2.2.3 前提环境搭建 在三台机子上设置反响代理需要的域名解析 vim /etc/hosts 192.168.122.11 192.168.122.11 (2)web server 的配置 配置apache的配置文件 rootnode1 # vim /etc/httpd/conf/httpd.conf . . . NameVirtualHost 192.168.122.11:80 Doc
41、umentRoot /var/www/www1/ ServerName DocumentRoot /var/www/www2/ ServerName 建立所需要的目录rootnode1 # mkdir /var/www/www1rootnode1 # mkdir /var/www/www2建立简单测试网页rootnode1 # echo this is a squid 反向 test from /var/www/www1/index.htmlrootnode1 # echo this is a squid 反向 test from /var/www/www2/index.html 重启apache服务rootnode1 # service httpd restartStopping httpd: OK Starting httpd: OK (3)配置squid编辑squid配置文件 vim /etc/squid/squid.confacl out src 2.2.2.0/24http_access allow out. . .# Squid normally listens to port 3128http_port 2.2.2.2:80 vhostcache_peer 192.168.122.11 p
链接地址:https://www.31ppt.com/p-2397490.html