当前位置: 首页 > 架构相关 > nginx反向代理替代squid做web缓存服务器

nginx反向代理替代squid做web缓存服务器

  • 分类:架构相关
  • 本文标签: nginx 缓存
  • 发布时间:2016-02-03 20:39:43
  • 作者:Ferman
  • 查看数: 446

        nginx支持类似squid的web缓存功能,就是把web页面根据url编码哈希后保存到硬盘上,有很多资料显示,nginx的稳定性和速度不逊于Squid,而且在性能上nginx对多核cpu的利用也超过Squid。而且nginx也同时支持负载均衡,这对于在短期内突然顶不住访问量的网站来说十分的便利。这篇文章就写下nginx作为反向代理web缓存的相关配置。在我本地做的实验 配置如下(在nginx负载均衡配置这篇文章的基础上进行更改实验成果),并且可以根据访问指定的连接来清楚缓存:

#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /var/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB
proxy_cache_path /var/proxy_cache_dir levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=5g;

upstream backend {
	server 172.31.153.188:8087;
	server 172.31.153.188:8088;
	server 172.31.153.188:8089;
}
server {
	listen          80;
	server_name     proxytest.com;
	location / {
		#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
		proxy_next_upstream http_502 http_504 error timeout invalid_header;
		proxy_cache cache_one;
		#对不同的HTTP状态码设置不同的缓存时间
		proxy_cache_valid 200 304 12h;
		#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
		proxy_cache_key $host$uri$is_args$args;

		#设置主机头和客户端真实地址
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		#禁用缓存
		#proxy_buffering on;
		#反向代理地址
		proxy_pass http://backend;
		expires 1d;
	}
	#用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
	location ~ /purge(/.*) {
		#为了安全起见,在这里最好设置为内部ip或域名才可以清除缓存
		allow all;
		proxy_cache_purge cache_one $host$1$is_args$args;
	}
}
include /etc/nginx/conf.d/*.conf


我访问 http://proxytest.com/index.php后在负载均衡服务器(缓存服务器)出现缓存页面(判断方式:在应用服务器上程序有写入日志操作,生成缓存后根据日志操作时间可判断是否真的有缓存)


再次访问 http://proxytest.com/purge/index.php后缓存消失。

至此,以上简单实验步骤已经完成。原理就是这样,生成缓存,删除缓存,做缓存这两个最重要的步骤。


转载时请以 超链接的形式 注明:转自Ferman

                  

About me