使用nginx的proxy_cache做网站缓存

news/2024/5/8 18:46:50/文章来源:https://blog.csdn.net/weixin_34307464/article/details/89759000

             为什么要做web cache,我想大家最主要的是解决流量的压力。随着网站流量的提升,如果只是单台机器既处理静态文件,又处理动态脚本,显然效率很难上升,不能处理日益上涨的流量压力。与此同时某些网站的页面内容并不是经常变化,因此我们可以分两层架构来组织网站。前端web缓存+后端web服务器,可以参看这里配置nginx反向代理配置

前端web缓存有多重方式实现,原理就是队请求结果页面静态化并设置一个超时期限,缓存页面过期后,新请求到达时重新到后端web服务器获取内容更新;没有nginx前比较流行的方法是squid,但squid不能充分利用处理器的多核特性,越来越多的网站选用nginx来做前端的web缓存。

要想使用nginx的缓存功能要保证nginx添加了proxy模块。我们可以使用-V选项(大写的V,小写的v是看版本号的)来查看nginx的编译参数。我使用的是默认的参数编译的,如下所示:

root@SNDA-172-17-12-117:/usr/local/nginx# ./nginx -V
nginx version: nginx/1.2.3
built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
TLS SNI support enabled
configure arguments: --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.21 --with-zlib=/usr/local/src/zlib-1.2.7

nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载,默认的编译选项下包含的模块,如果你不是显示的用参数关闭它。


wKiom1SdBUSBfIE1AAZmuPpNr7w810.jpg


proxy模块中常用的指令时proxy_pass和proxy_cache.

nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成,proxy_cache指令负责反向代理缓存后端服务器的静态内容,fastcgi_cache主要用来处理FastCGI动态进程缓存(这里我不是很清楚这两个指令的区别,好像功能上都差不多,尤其后面这句话的意思,是我翻译过来的)。

确认proxy模块安装好后,下面对nginx的配置文件进行设置,重点部分如标红字体所示。

下面是配置文件:

http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$host"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#Compression Settings
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Some version of IE 6 don't handle compression well on some mime-types,
# so just disable for them
gzip_disable "MSIE [1-6].(?!.*SV1)";
# Set a vary header so downstream proxies don't send cached gzipped
# content to IE6
gzip_vary on;
#end gzip

#cache begin
proxy_buffering on;
proxy_cache_valid any 10m;
proxy_cache_path /data/cache levels=1:2 keys_zone=my-cache:800m max_size=1000m inactive=1d max_size=30g ;    

##定义缓存目录路径/data/cache

#硬盘缓存中目录分为两级,第一级文件夹名字是1个字母,第二级文件夹名字是两个字母

##定义缓存区域名字(新建内存缓存区域为200M)keys_zone=cache_one:200m

##定义缓存区域名字(新建内存缓存区域为200M)keys_zone=cache0:200m 

##缓存内容1天后自动到期清除inactive=1d

##在缓存硬盘上划分30G空间max_size=30g 



proxy_temp_path /data/temp;   (proxy_cache_path )这两个目录必须在同一个磁盘分区上。
proxy_buffer_size 4k;
proxy_buffers 100 8k;
#cache end

upstream apachephp {
server www.quancha.cn:8080; #Apache1
}

## Start www.quancha.cn ##


server {
listen 80;
server_name *.quancha.cn;

access_log logs/quancha.access.log main;
error_log logs/quancha.error.log;
root html;
index index.html index.htm index.php;

## send request back to apache1 ##
 location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_pass http://apachephp;

proxy_cache cache_one;                   ##启用上述创建的缓存区域cache_one

proxy_cache_valid 200 304 1h;            ##对返回状态200 304 缓存1小时

proxy_cache_valid 301 302 1h;            ##对返回状态301 302 缓存1小时

proxy_cache_valid any 1m;                ##对其他状态码缓存10分钟

proxy_cache_key $host$uri$is_args$args;  ##以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内。指令指定了包含在缓存中的缓存关键字。

expires 6h;                              ##在服务器http响应头中加入过期时间为6h,启用客户端本地缓存。时间为6h

#Proxy Settings

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;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#下面是可选部分

proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
##End Proxy Settings
}
}


}


配置文件中以proxy_开头的指令我们大都可以字面意思得到理解。请务必注意一点proxy_cache_path和proxy_temp_path设置的目录需要在同一分区,因为它们之间是硬链接的关系


清空缓存配置:


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

vim   bbs.xxxxx.conf


 location ~ /purge(/.*) {

            allow 192.168.1.0/24;

            deny all;

            proxy_cache_purge cache_one $host$1$is_args$args;

         }


假如你的站是bbs.domain.com,手动执行bbs.domain.com/purge/   即可清空缓存。。。





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


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

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

相关文章

从小网站到大门户,使用负载均衡进行平滑的演进业务

众所周知,云计算有着弹性扩容、按需付费的特点,这对于小企业或创业公司来说是非常有利的。在业务初期,用户量较少,只需要购买较少的云计算资源便可以将业务系统搭建起来,后面随着用户量逐步攀升,业务量逐步…

jQuery实现大型网站导航栏,鼠标移出使用mouseout使内容框隐藏但当鼠标滑到框时已经隐藏如何解决?

大型网站比如慕课网,电商商城的导航都是左侧导航分类,右侧是轮播图,然后当鼠标经过导航分类时显示对应的内容框;这个就用到我之前写的如何点击顶部导航显示对应的左侧边栏,原理是相同的; 先来看一下我要实…

chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?

目录 chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存1. 常用保存Sources源码的两种方法1.1单个文件1.2 单个页面2. 问题3.解决方案chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存 1. 常用保存Sources源码的两种方法 1.1单个文件 可以直接…

IE9网站模式 技术白皮书

微软最近发布了“IE 9网站模式技术白皮书”,给大家参考一下吧 也可以下载附件:IE9_固定网站_技术白皮书.rar ************************************************************************ IE9固定网站功能简介 简单来说,IE9固定网站(Pinned W…

网站设计常用技巧收集

------------------------------------------- 一般不会注意的地方 --------------------------------------------------------------------------------- 1.不管是IE那个版本都规定为IE8使用 <meta http-equiv"X-UA-Compatible" content"IE8"/> 2.…

Java开发必知道的国外10大网站

1、https://www.google.com/ 不解释 2、https://stackoverflow.com 里面包含各种开发遇到的问题及答案&#xff0c;质量比较高。 3、https://github.com/ 免费的开源代码托管网站&#xff0c;包括了许多开源的项目及示例项目等。 4、https://dzone.com/ 提供技术新闻、编程教…

最全资料整理, 教你如何用HEXO搭建十分cool的属于自己的网站

…足足部署了4天, bug层出不穷啊, 各种改, 现附上自己博客地址和效果图. 我的网站—-liuzhixuan360.com 效果图: 网站优化还没做, 可能加载时间稍微长一点. 正文 下面我简单概述一下, 这个博客搭建的过程以及原理. 在大体上博客的整体搭建总共可以分3个部分. 一. HEXO框…

利用Performance API分析网站性能

performance window.performance.timing对象包含了完整的网页加载性能数据, 下面详细介绍如何通过对象各个属性获取页面加载期间各个阶段的性能 页面加载的第一个时间点是navigationStart, 表示上一个页面的unload事件触发, 接下来的事件点是fetchStart, 表示开始获取当前页面…

深圳全网营销公司浅谈网站优化的技巧

深圳网站优化是如何做好内部优化的呢&#xff1f;要知道再美观的房子&#xff0c;也需求内部的装修&#xff0c;在美观的美女&#xff0c;也需求内涵&#xff0c;网站排名再好&#xff0c;也一样的需求内部优化&#xff0c;要知道对网站进行内部优化的方式有许多&#xff0c;终…

等保2.0来了 | 网站被黑,还要被处罚,为什么背锅的总是我?

2019独角兽企业重金招聘Python工程师标准>>> “净网2019”专项行动开展以来&#xff0c;四川公安网安部门查处了一批不履行网络安全管理义务的网络运营者&#xff0c;其中包括不履行网络安全保护义务的高校、政府机关、企业和单位均受到了处罚&#xff01; ▶ 宜宾学…

网站架构结构的变迁史

前些天看到一篇不错的文章[1]&#xff0c;讲的是网站架构的发展历史&#xff0c;这种综述的文章往往很难得&#xff0c;这里进行一个简化诉述和我个人的解读&#xff0c;详细的信息可以参看Ref的连接。首先&#xff0c;我先给一个通俗的理解&#xff0c;网站架构发展的驱动力是…

网站配置https

https证书有四种&#xff0c;这里我们只介绍最简单并且免费的&#xff0c;域名证书。 写这篇文章的原因很简单&#xff0c;上一篇文末我说要使用WebRTC进行屏幕录制或者是远程桌面分享&#xff0c;必须要使用https&#xff0c;可能有很多人还不太会配置https&#xff0c;今天就…

浅谈大型网站之负载均衡架构

概念 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其意思就是分摊到多个操作单元上进行执行&#xff0c;例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等&#xff0c;从而共同完成工作任务。 负载均衡建立在现有网络结构之上&#xff0c;它提…

整合营销系统推荐乐云seo_seo公司

seo公司  网下推广&#xff1a;借助线下的平面媒体&#xff1a;名片、标志、彩页等一些列的传统媒体进行网站的推广。【篇二】网络营销策划方案  一、网站分析  1、网站流量分析  安装一套流量统计系统&#xff0c;可以清晰的判断网站目前所有营销手段的效果&#xff0…

生成静态html文件_2019年最流行的静态网站生成器有哪些?

静态站点生成器变得越来越流行。下面解释一下我们所说的“静态站点生成器”到底是什么。静态站点生成器是介于手工编码的静态站点和 CMS 之间&#xff0c;同时保留两者优点的折中解决方案。本质上&#xff0c;你会使用类似 CMS 模版的概念生成静态 HTML 站点。内容可能会是从数…

撑起12306网站,全靠这个世界第一的缓存框架!

提起业务量&#xff0c;除了京东618&#xff0c;淘宝双11&#xff0c;当数全民抢票平台 12306最有发言权。后台有位粉丝问了个很典型的问题&#xff0c;同样是架设在阿里云上的服务器&#xff0c;为什么12306经常会宕机&#xff0c;而双11阿里每秒钟50多万笔订单&#xff0c;都…

ASP.NET 4中的SEO改进

ASP.NET 4包括了一系列新的运行时特性&#xff0c;可以帮助你进一步优化你的网站。其中一些新特性可以用来进行SEO优化以提高网站在搜索引擎中的排名和权重&#xff0c;这些特性包括&#xff1a; 新的Page.MetaKeywords 和 Page.MetaDescription 属性 针对ASP.NET Web Forms的新…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

从LiveJournal后台发展看大规模网站性能优化方法

因近期打算对公司应用架构进行调整, 其中的一些思路值得借鉴. 以下为转载内容: 一、LiveJournal发展历程 LiveJournal是99年始于校园中的项目&#xff0c;几个人出于爱好做了这样一个应用&#xff0c;以实现以下功能&#xff1a; 博客&#xff0c;论坛社会性网络&#xff0…

23个精美的的国外网站设计作品推荐欣赏

如果一个网站的内容不是很多而且将来内容也不怎么增加的话&#xff0c;那么制作成单页&#xff08;Single Page Websites&#xff09;的形式是很好的选择。这种只有一个页面的网站形式&#xff0c;曾经非常流行&#xff0c;现在依然有很多人喜欢。如果你也想做一个这样的网站&a…