有比squid更好的代理缓存服务器软件吗
代理服务器的功能是代理网络用户取得网络信息,它是网络信息的中转站。随着代理服务器的广泛使用,随之而来的是一系列的安全问题。由于没有对代理服务器的访问控制策略作全面细致的配置,导致用户可以随意地通过代理服务器访问许多色情、反动的非法站点,而这些行为往往又很难追踪,给管理工作带来极大的不便。Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。安装和配置SquidServer通常说来,安装Squid有两种方法:一是从RedHatLinux9中获取该软件的RPM包进行;二是安装从Squid的官方站点aclallsrc0000/0000http_accessallowpermitted_domainhttp_accessdenyall如果,使用正则表达式,拒绝客户机通过代理服务器访问包含有诸如“sexy”等关键字的网站。那么具体操作如下:acldeny_urlurl_regex-sexyhttp_accessdenydeny_url如果,拒绝客户机通过代理服务器访问文件中指定IP或者域名的网站,其中文件/etc/squid/deny_ip中存放有拒绝访问的IP地址,文件/etc/squid/deny_dns中存放有拒绝访问的域名。那么具体操作如下:acldeny_ipdst“etc/squid/deny_ip”acldeny_dnsdst“etc/squid/deny_dns”http_accessdenydeny_iphttp_accessdenydeny_dns
你要做正向代理还是反向代理,正向代理需要用户浏览器进行配置,反向代理需要先配置DNS服务器,然后接受用户浏览请求,转发请求给远程服务器,当然,转发过程中可以进行访问控制操作,缓存部分我们最近也碰到了问题,现在的想法是用哈希表进行存储,利用MD5加密进行哈希函数设计
我刚刚的回答应该有问题。
你的缓存服务器怎么运作的?可以上网的吧?比方proxy服务器的话,所有上网的客户机把代理设置为proxy 服务器,提交请求的时候就是先找这台缓存服务器,而缓存服务器发现缓存中没有内容的时候会自动上网获取内容再提交给客户端。
串联的话,NAT方式缓存服务器可能起不到缓存的作用了,还是代理模式才可以。原理一样,串并联都没关系。
缓存的基本思想是利用客户端访问的时间局限性,将客户端访问过的内容做一个副本,在一定时间内存放到本地,当改数据下次被访问时,不必连接到后端服务器反复去查询数据,而是由本地保存的副本响应数据。
保存在本地的这些副本具有一个过期时间,超过该时间将会更新。判断一个副本数据是否为过期数据的办法有很多,可以使用保留时间来判断,也可以使用数据完整度来判断。
许多Web服务器还具有校验功能,就是当某些副本数据过期以后,先向后端服务器发送校验请求,后端服务器对这些数据进行校验,如果发现原数据和副本没有差别,则将过期副本重新置为可用副本。
以上nginx配置结合使用:
proxy_params文件的配置如下:
访问一次页面,并向 http://wwwblogs-scom:8080/api/ 发起一个接口数据请求,查看/cache/nginx目录下的缓存结果:
ngx_cache_purge是nginx的第三方模块,能够帮助我清除nginx中的缓存。
在之前的nginx编译安装中我们是没有把缓存的清除模块ngx_cache_purge编译进去的,如果启动了缓存,没有安装这个模块,在之后的调试中我们尝试去清除缓存时,将会出现异常:
这个异常是在指示我们,找不到该指令的驱动,需要按照相关模块。
ngx_cache_purge只是nginx的第三方模块,并不是某个特殊的软件,所以我们需要对nginx重新进行编译,操作如下:
配置nginx:
再一次启动nginx成功;
接下来进行缓存清除测试,访问: http://blogscom/clear_cache/api/indexphp , 访问这个连接将会清除接口: http://blogscom/api/indexphp 的缓存数据。
结果如下:
在项目开发中,不可能出现什么都需要缓存的数据,缓存仅仅适合去缓存查询频繁,但是不需要实时更新的数据,这个是它适合的场景,而我们上面的配置,只要是访问api接口目录就会缓存接口的数据,这样对于一些需要实时更新的接口数据来说是不合理的,需要控制好nginx的缓存去缓存什么以及不缓存什么
set 指令为变量设置,proxy_no_cache参数中的值可以设置多个,但是多个值中,只要有一个是不为0的,就会通过缓存响应数据。
该指令用于配置一块公用的内存区域的名称,该区域可以存放缓存的索引数据。这些数据在Nginx服务器启动时由缓存索引重建进程负责建立,在Nginx服务器的整个运行过程中由缓存管理进程负责定时检测过期数据,检索等管理工作。
该指令用于配置Nginx服务器向客户端发送响应数据时,不从缓存中获取的条件。这些条件支持使用Nginx 配置的常用变量。
看一个例子:
其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma 和Shttp_authorization 都是Nginx配置文件的变量,
该指令用于设置Nginx服务器在内存中为缓存数据建立索引时使用的关键字
如果我们希望缓存数据包含服务器主机名称等关键字,则可以将该指令设置为:
该指令用于设置是否开启缓存的锁功能。在缓存中,某些数据项可以同时被多个请求返回的响应数据填充。开启该功能后,Nginx服务器同时只能有一个请求填充缓存中的某一数据项,这相当于给该数据项上锁,不允许其他请求操作。其他的请求如果也想填充该项,必须等待该数据项的锁被释放。这个等待时间由 proxy_cache_lock_timeout 指令配置。
该指令用于设置缓存的锁功能开启以后锁的超时时间。具体细节参见proxy_cache_lock 指令的相关内容
其中,time为设置的时间,默认为5s。
该指令用于设置客户端请求发送的次数,当客户端向被代理服务器发送相同请求达到该指令设定的次数后,Nginx服务器才对该请求的响应数据做缓存。合理设置该值可以有效地降低硬盘上缓存数据的数量,并提高缓存的命中率。
其中,number为设置的次数。默认设置为1。
该指令用于设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容
该指令设置比较复杂,一般需要设置前面三个指令的情形比较多,后面的几个变量与Nginx服务器缓存索引重建进程及管理进程的性能相关,一般情况下保持默认设置就可以了。我们来看几个简单的配置实例:
如果Nginx在访问被代理服务器过程中出现被代理的服务器无法访问或者访问错误等现象时,Nginx服务器可以使用历史缓存响应客户端的请求,这些数据不一定和被代理服务器上最新的数据相一致,但对于更新频率不高的后端服务器来说,Nginx服务器的该功能在一定程度上能够为客户端提供不间断访问。该指令用来设置一些状态,当后端被代理的服务器处于这些状态时,Nginx服务器启用该功能。
该指令可以支持的状态如语法结构中所示。
该指令可以针对不同的HTTP响应状态设置不同的缓存时间,
该指令同于配置在什么情况下不使用cache功能
该指令配置是否在本地磁盘缓存来自被代理服务器的响应数据。这是Nginx服务器提供的另一种缓存数据的方法,但是该功能相对 Proxy Cache简单一些,它不提供缓存过期更新、内存索引建立等功能,不占用内存空间,对静态数据的效果比较好。
Proxy Store方法多使用在被代理服务器端发生错误的情况下,用来缓存被代理服务器的响应数据。
该指令用于设置用户或用户组对Proxy Store缓存的数据的访问权限,
有关Proxy Store方法的使用,我们通过官方给出的实例加深理解,在该实例中笔者通过注释对配置做了说明:
0条评论