利用squid反向代理提高网站性能

news/2024/5/16 6:20:03/文章来源:https://blog.csdn.net/weixin_34306593/article/details/89800297

       利用squid反向代理提高网站性能


本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。

现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。


反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服

务器的内容缓存器。其系统结构如图 1



 

 
 

反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。


回页首

目前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

Squid 是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP 等多种协议,是现在 Unix 系统上使用、最多功能也最完整的一套软体。下面将重点介绍 Squid 反向代理的实现原理和在提高网站性能方面的应用。

Squid反向代理服务器位于本地 WEB 服务器和 Internet 之间 , 组织架构如图 2:


 
 

客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:

  • Last-Modified: 告诉反向代理页面什么时间被修改

  • Expires: 告诉反向代理页面什么时间应该从缓冲区中删除

  • Cache-Control: 告诉反向代理页面是否应该被缓冲

  • Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache


回页首


本实例的域名是 wenjin.cache.ibm.com.cn,通过DNS的 轮询技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性。该系统结构图 3 如下:



 

 
 

配置的系统环境:

  • 一台 DNS 服务器:操作系统 Freebsd,软件 BIND 9.5,IP 192.168.76.222 ;

  • 三台 Squid 服务器:操作系统 Linux AS 4,软件 Squid 3.0,相应的 IP 如下:


Squid1:192.168.76.223 Squid2:192.168.76.224 Squid3:192.168.76.225
           


 

  • 三台 WEB 服务器:操作系统 Linux AS 4,应用软件 Tomcat 5.0+Mysql,相应的 IP 地址如下:


webServer1:210.82.118.195 webServer2:192.168.76.226 webServer1:192.168.76.227
           


 

应用软件的安装和配置

配置 DNS 服务器

软件利用 Freebsd 自带的 bind 9.5 。然后针对该系统配置 bind,首先修改 bind 的配置文件 /etc/namedb/named.conf,在文件中添加


zone "cache.ibm.com.cn"{ type master; file "master/ cache.ibm.com.cn "; };
           


 

再在 /etc/namedb/master 目录下添加 cache.ibm.com.cn 文件,该文件的内容如下:


$TTL    3600 @       IN      SOA     search. ibm.com.cn. root. ibm.com.cn.  ( 20080807        ; Serial 3600    ; Refresh 900     ; Retry 3600000 ; Expire 3600 )  ; Minimum IN      NS      search.ibm.com.cn. 1       IN      PTR     localhost.ibm.com.cn. wenjin  IN      A       192.168.76.223 wenjin  IN      A       192.168.76.224 wenjin  IN      A       192.168.76.225
           


 

这样当用户请求的时候,DNS 通过轮询机制将 wenjin.cache.ibm.com.cn 的域名解析为 192.168.76.223、192.168.76.224 和 192.168.76.225 其中之一。

配置完成后,运行 rndc star t 启动 bind 服务。可在 /etc/rc.conf 中设置 named_enable="YES" 使得开机自启动。

用 ps – A |grep named 查看 bind 服务是否起来;

用 nslookup wenjin.cache.ibm.com.cn 测试 bind 服务是否正常运行。

配置 Squid1 服务器

  1. 下载 squid-3.0.STABLE8.tar.gz 源码包,将其放在 /home 目录下

  2. 解压缩tar – zxvf squid-3.0.STABLE8.tar.gz 
       设置配置参数:cd squid-3.0.STABLE10 

    ./configure – prefix=/usr/local/squid
                   


       将 squid 安装在 /usr/local 目录下

  3. 编译安装:make&make install安装完以后会在 /usr/local 目录下看见 squid 目录。

  4. 配置 squid 配置文件

    编辑 squid.conf 文件,vi /usr/local/squid/etc/squid.conf

    cache_effective_user squid cache_effective_group squid ######### 设定 squid 的主机名 , 如无此项 squid 将无法启动visible_hostname squid1.nlc.gov.cn ############# 配置 squid 为加速模式 ################# http_port 80 accel vhost vport icp_port 3130 ##### 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时,通过 ICP 查询去其邻居中取得缓存cache_peer squid2.ibm.com.cn sibling 80 3130 cache_peer squid3.ibm.com.cn sibling 80 3130 ##### squid1 的三个父节点,originserver 参数指明是源服务器,round-robin  参数指明 squid 通过轮询方式将请求分发到其中一台父节点;squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了,
    那么 squid 会从剩余的 origin 服务器中抓取数据cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin \ name=webServer1 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin \ name=webServer2 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin \ name=webServer3 #### 将 wenjin.cache.ibm.com.cn 域的请求通过 RR 轮询方式转发到三个父节点中的一个cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.ibm.com.cn ##### 下面是一些访问控制、日志和缓存目录的设置acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225 acl all src 0.0.0.0/0.0.0.0 http_access allow all icp_access allow localnet cache_log /usr/local/squid/var/logs/cache.log access_log /usr/local/squid/var/logs/access.log squid cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256 ####### 对 squid 的一些优化 ############### maximum_object_size 10240 KB  ### 能缓存的最大对象为 10M maximum_object_size_in_memory 512 KB ### 内存中缓存的最大对象 512K cache_mem 256 MB  ###squid 用于缓存的内存量
                   


       

    保存后 :wq 退出。

    在 /etc/hosts 文件中添加

    192.168.76.223  squid1.ibm.com.cn 192.168.76.224  squid2.ibm.com.cn 192.168.76.225  squid3.ibm.com.cn
                   


       

    保存后 : wq 退出。

    检查 squid 配置文件正确与否:/usr/local/squid/bin/squid – k parse

    生成缓存目录/usr/local/squid/bin/squid – z

    启动squid:/usr/local/squid/bin/squid

    配置 squid2 和 squid3 服务器

    squid2 和 squid3 服务器的配置方法和配置参数和 squid1 一样,配置完成后,分别启动这两个服务器上的 squid 服务。

    在 squid 的日志文件 cache.log 中,出现如下日志信息则说明三台 squid 之间成功配置为 sibling,且配置了三个父代理。

    2008/11/17 10:08:47| Configuring Sibling squid1.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Sibling squid3.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0 2008/11/17 10:08:47| Ready to serve requests.
                   


        

测试

测试之前,保证 DNS 服务、三台 squid 服务和三台 web 服务都正常起来。在客户端输入http://wenjin.cache.ibm.com.cn,则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。

原创引自http://www.ibm.com/developerworks/cn/linux/l-cn-squid/

附加:

######强烈建议写上下面两句,经测试能显著提高Mem_hit 至少我的很有效#####
memory_replacement_policy heap LFUDA      
cache_replacement_policy heap GDSF

下面是我的分析,不知道对不对,大家指正:
memory_replacement_policy 这个是设定内存替换策略的,默认的lrf 是根据请求时间来决定是否缓存,也就是说越早请求的内容,越可能被squid丢弃而不放在内存,越是最近请求的内容就越可能被缓存在内存;
lrf 这种有一个致命的缺陷,那就是根据时间来决定缓存对象,而不是根据访问频率

所以我们应该设定为 heap LFUDA   这个策略是根据访问频率来测算一个权衡值,越频繁访问的内容,就越可能被squid缓存在内存

至于 cache_replacement_policy heap GDSF 这个设定,可能要根据个人情况来设,我自己尝试GDSF比较适合我的情况

###############################################################


squid round-robin分发后无法限制域名

有的配置文件如下            

cache_peer 10.11.12.51 parent 80 0 no-query originserver round-robin name=web1
           cache_peer 10.11.12.52 parent 80 0 no-query originserver round-robin name=web2
           cache_peer 10.11.12.53 parent 80 0 no-query originserver round-robin name=web3
           cache_peer 10.11.12.54 parent 80 0 no-query originserver round-robin name=web4
           cache_peer 10.11.12.160 parent 80 0 no-query originserver name=content
           cache_peer 10.11.12.150 parent 80 0 no-query originserver name=bbs
           cache_peer 172.16.10.140 parent 80 0 no-query originserver round-robin name=game1
           cache_peer 172.16.10.141 parent 80 0 no-query originserver round-robin name=game2
           
           cache_peer_domain contentchina content.web.com
           cache_peer_domain bbs bbs.web.com
           cache_peer_domain game1 game2 game.web.com
           cache_peer_domain web1 web2 web3 web4 .web.com
           cache_peer_domain web1 web2 web3 web4 web.com

设定不同的二级域名分发到不同的服务器上.
           www.web.com能够正确访问.
           查看后台链接.每次访问时squid也会正常去连parent服务器,每次都轮询访问
           测试game.web.com
           返回有很多内容都是404
           但是单独访问140以及141都是没有问题
           然后发现很多链接分发到了其他web服务器上
           看了说明.里面提到round-robin参数会设置一组随机的访问
           感觉是写了round-robin的都是一个组
           所以将game的去掉round-robin参数

cache_peer 172.16.10.140 parent 80 0 no-query originserver name=game1
           cache_peer 172.16.10.141 parent 80 0 no-query originserver name=game2

访问后仍旧发现还是有分发错误的情况
           再次查看squid.conf.default
           里面的cache_peer_domain的语法如下

# cache_peer_domain cache-host domain [domain ...]
           # cache_peer_domain cache-host !domain

感觉是否是因为cache-host这里只能写一台服务器而非一组的关系
           随将配置文件修改

cache_peer 10.11.12.51 parent 80 0 no-query originserver round-robin name=web1
           cache_peer 10.11.12.52 parent 80 0 no-query originserver round-robin name=web2
           cache_peer 10.11.12.53 parent 80 0 no-query originserver round-robin name=web3
           cache_peer 10.11.12.54 parent 80 0 no-query originserver round-robin name=web4
           cache_peer 10.11.12.160 parent 80 0 no-query originserver name=content
           cache_peer 10.11.12.150 parent 80 0 no-query originserver name=bbs
           cache_peer 172.16.10.140 parent 80 0 no-query originserver round-robin name=game1
           cache_peer 172.16.10.141 parent 80 0 no-query originserver round-robin name=game2
           
           cache_peer_domain contentchina content.web.com
           cache_peer_domain bbs bbs.web.com
           cache_peer_domain game1 game.web.com
           cache_peer_domain game2 game.web.com
           cache_peer_domain web1 .web.com
           cache_peer_domain web2 .web.com
           cache_peer_domain web3 .web.com
           cache_peer_domain web4 .web.com
           cache_peer_domain web1 web.com
           cache_peer_domain web2 web.com
           cache_peer_domain web3 web.com
           cache_peer_domain web4 web.com

修改后访问game.web.com
           问题解决.没有出现404
           后台的分发很正常
           可能由于cache-host这里写了一组
           导致squid并无法辨识进行针对性的分发
           随即将所有的分发都分发到所有round-robin服务器上.
           因为www.web.com后端的服务器较多.命中的概率较大.
           而命中后第二次取出文件即是squid中的缓存文件,所以访问www.web.com时没有发现问题
           而game.web.com因为真实服务器比例较小
           分发时很多链接分发到其他web服务器.




      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1956733,如需转载请自行联系原作者






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_763362.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个很好的命令行分享网站

跟上一篇一样 发现有一个分享的工具 https://asciinema.org/a/24707 看视频处理 还能够 copy出里面的内容 直接看官网 感觉自己知道的太少了.. 还有那么好用的东西 一边教学 一边还能复制东西. mark一下. 以后多学习. 转载于:https://www.cnblogs.com/jinanxiaolaohu/p/9337904…

【阿里云】云服务器 ECS部署网站

我是广告!!! https://promotion.aliyun.com/ntms/yunparter/invite.html?userCodehgk32vx5 领券更优惠,老板看着来~ 1.服务器购买 服务器:(推荐) https://promotion.aliyun.com/ntms/act/campus2018.html?utm_contentse_1000442225 ps:可以放多个网站一个人买觉得贵的话,可以…

移动网站性能优化:网页加载技术概览

性能一直是网站成功的关键。越来越多的研究已经证明,不管是小型电商,还是像沃尔玛那样的连锁店,即使是页面加载时间方面的细微改善,都可以带来更多的业务,更多的广告收入,更多的用户粘性和更多的客户满意度…

小白建站——宝塔Linux配合阿里云服务器搭建属于自己的网站

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志——苏轼 写在前面 由于现在大部分服务器都是 Linux 系统,全球最快的10台超级计算机也是 Linux 系统,由于 Linux 本身有一些难度,上手的成本比较高,这就导…

Linux系统下利用wget命令把整站下载做镜像网站

Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论:0 条 | itokit 在linux下完整的用wget命令整站采集网站做镜像 的命令是及无视网站根目录下的robots.txt限制。并且可以模拟一个正常浏览者的信息下载该网站。 C/C Code复制内容…

Leader:马上中秋节了,你在网站的console面板中画一个嫦娥奔月,要有逼格

Hello 大家好,我是一碗周,不是你想的那个“一碗粥”,是一个不想被喝掉的前端👨🏻‍💻,如果我写的文章有幸可以得到你的青睐,万分有幸~ Leader:小周,还有十来天…

学习笔记网站之在ASP和PHP语言及数据库选择上的3个要点[图文]

2019独角兽企业重金招聘Python工程师标准>>> 学习笔记网站之在ASP和PHP语言及数据库选择上的3个要点[图文] 去年12月份,我开始着手建立一个学习类的博客网站,由于博客站点我以前就接触过,因此在网站建设方面还是有些心得的&#x…

[个人网站搭建]·极简方式实现打赏功能

[个人网站搭建]极简方式实现打赏功能 可以查看我的个人主页,参看效果--> http://www.yansongsong.cn 个人网站搭建github地址:https://github.com/xiaosongshine/djangoWebs 在个人网站博客中,打赏赞助是对作者的一种支持与鼓励&#xff…

通过小程序实现网站扫码登录!每年都可以省 300 块...代替微信开放平台和服务号的登陆模式!...

我们知道,要接入微信登陆有两种方式 1、微信开放平台2、微信服务号 这两种方式均可生成带参数的二维码,然后扫码获取用户基本信息的,所以我们可以在网站上用这两种方式开发网站的扫码登录,也是现在很多网站的通用做法。 微信开放平…

iis6开户gzip 网站属性里面没有服务选项卡

请注意一点,是直接在名为“网站”的文件夹上面右键选择属性,不是去点下面建立的某一个网站。开户GZIP是整台服务器上面的虚拟主机都同时开启的,不对针某一个单独网站。 开启Gzip具体步骤: 1. 在 "IIS 管理器" 中&am…

MetInfo最新网站漏洞如何修复以及网站安全防护

2019独角兽企业重金招聘Python工程师标准>>> metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产…

如何部署一个静态网站

简介 静态网站 没有数据库的支持,不会与用户间产生数据交互 如果我们没有与用户间来进行数据交换,可以考虑一下静态网站 不必花钱买 服务器域名,自己制作的静态网站也可以通过网址的方式来分享给小伙伴 安装git软件 官网下载地址&#xff…

如何利用云服务器搭建个人网站

去阿里云进入官网 aliyun.com 注册账号 小林同学在这里用阿里云演示,大家也可以去腾讯云、百度云注册等大型知名企业,步骤雷同,看个人喜欢 注册完,完善个人信息,进行实名认证 主页面 点击 最新活动 并找到 新手上路 和…

五大步骤快速搭建个人网站

导语 现在作为一个IT程序猿,没有一个自己的个人网站怎么行呢,现在就连许多不是IT人员都会搭建自己的个人网站 。那作为一个IT人员,如果别人让你帮忙搭建一下网站,然而你却没玩过,说不会,岂不是很尴尬 。另…

asp登录页面跳转到注册页面_网站注册登录页面大美化!

教程旨在实现网站用户注册登录分为两部分:邮箱设置、注册登录使用三款插件:WP Mail SMTPWP Open Social、Wechat Social先看一下效果图1、登录弹窗2、注册页面3、侧边栏工具Wechat Social侧边栏小工具一、邮箱配置因为在WordPress自带的邮箱基本残废我们…

python爬取安居客二手房网站数据(转)

之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信…

java写网页_初次尝试通过java写简单网站

一、安装Tomcat及配置1、下载Tomcat2.配置环境变量新建系统变量如下图所示修改path:变量末尾添加(%CATALINA_HOME%\bin)3.查询配置是否成功这样显示表示已经成功4.启动tomcat使用命令startup.bat当出现以上时在浏览器中输入http://localhost:8080注意以上两个命令框…

这个技术网站,恢复更新了!

点击上方“程序IT圈”,选择“置顶公众号”关键时刻,第一时间送达!大家好,还记得我之前开通了个在线学习博客网站『程序猿圈』,目前网站已经沉淀了一些对于大家有价值的内容了,已经更新了差不多100多篇干货文…

我顺藤摸瓜端了色情网站的老窝,并劝他从良

前几天无意发现了一个色情网站,本着除暴安良的心态,直接开始对这个网站开始了调查这个网站的域名是.cn结尾的 【.cn是国内域名,无法隐藏注册人的信息】我去站长之家里面对这个网站进行Whois查询按照惯例这种联系人的姓名基本是假的,我们对它进…

ios微信端网站遇到的问题

最近的一个项目,在测试ios时遇上了一些问题: 1.给div、span等元素绑定的点击事件无效 2.表单输入时整个页面白屏 3.readonly的元素出现光标(iphon5/ ios8.0) 第一条:给div、span(或非 a,input,button&#…