Nginx系列教程(3)nginx缓存服务器上的静态文件
使用nginx缓存服务器上的静态文件
一、nginx缓存的优点
如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。
因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。
毕竟,IO密集型服务的处理是nginx的强项。
二、如何进行设置
先上个栗子:
http{ proxy_connect_timeout 10; proxy_read_timeout 180; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_busy_buffers_size 96k; proxy_temp_file_write_size 96k; proxy_temp_path /tmp/temp_dir; proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g; server { listen 80 default_server; server_name localhost; root /mnt/blog/; location / { } #要缓存文件的后缀,可以在以下设置。 location ~ .*\.(gif|jpg|png|css|js)(.*) { proxy_pass http://ip地址:90; proxy_redirect off; proxy_set_header Host $host; proxy_cache cache_one; proxy_cache_valid 200 302 24h; proxy_cache_valid 301 30d; proxy_cache_valid any 5m; expires 90d; add_header wall "hey!guys!give me a star."; } } # 无nginx缓存的blog端口 server { listen 90; server_name localhost; root /mnt/blog/; location / { } } }
因为我是在一台服务器上做试验,所以用了两个端口80
和90
进行模拟两台服务器之间的交互。
80
端口对接的是普通的域名(http://wangxiaokai.vip
)访问。90
端口负责处理80
端口代理过来的资源访问。
相当于90
端口是源服务器,80
端口是nginx反向缓存代理服务器。
接下来讲一下配置项:
2.1 http层设置
proxy_connect_timeout 10; proxy_read_timeout 180; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_busy_buffers_size 96k; proxy_temp_file_write_size 96k; proxy_temp_path /tmp/temp_dir; proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
- proxy_connect_timeout
服务器连接的超时时间
- proxy_read_timeout
连接成功后,等候后端服务器响应时间
- proxy_send_timeout
后端服务器数据回传时间
- proxy_buffer_size
缓冲区的大小
- proxy_buffers
每个连接设置缓冲区的数量为number,每块缓冲区的大小为size
- proxy_busy_buffers_size
开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。
- proxy_temp_file_write_size
设置nginx每次写数据到临时文件的size(大小)限制
- proxy_temp_path
从后端服务器接收的临时文件的存放路径
- proxy_cache_path
设置缓存的路径和其他参数。被缓存的数据如果在inactive参数(当前为1天)指定的时间内未被访问,就会被从缓存中移除
2.2 server层设置
2.2.1 反向缓存代理服务器
server { listen 80 default_server; server_name localhost; root /mnt/blog/; location / { } #要缓存文件的后缀,可以在以下设置。 location ~ .*\.(gif|jpg|png|css|js)(.*) { proxy_pass http://ip地址:90; proxy_redirect off; proxy_set_header Host $host; proxy_cache cache_one; proxy_cache_valid 200 302 24h; proxy_cache_valid 301 30d; proxy_cache_valid any 5m; expires 90d; add_header wall "hey!guys!give me a star."; } }
- proxy_pass
nginx缓存里拿不到资源,向该地址转发请求,拿到新的资源,并进行缓存
- proxy_redirect
设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
- proxy_set_header
允许重新定义或者添加发往后端服务器的请求头
- proxy_cache
指定用于页面缓存的共享内存,对应http层设置的keys_zone
- proxy_cache_valid
为不同的响应状态码设置不同的缓存时间
- expires
缓存时间
这里我设置了图片
、css
、js
静态资源进行缓存。
当用户输入http://wangxiaokai.vip
域名时,解析得到ip:port
的访问地址。port
默认为80。所以页面请求会被当前server截取到,进行请求处理。
当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。
如果获取到对应资源,则直接返回数据。
如果获取不到,则将请求转发给proxy_pass
指向的地址进行处理。
2.2.2 源服务器
server { listen 90; server_name localhost; root /mnt/blog/; location / { } }
这里直接处理90
端口接受到的请求,到服务器本地目录/mnt/blog
下抓取资源进行响应。
三、如何验证缓存是否有效
细心的读者应该发现,我在第二段栗子里,留了个彩蛋 add_header wall "hey!guys!give me a star."
。add_header
是用于在报头设置自定义的信息。
所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。
访问http://wangxiaokai.vip
结果如下:
本系列往期文章参考
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文看懂HashMap面试考点
HashMap是面试中经常问到的一个知识点,也是判断一个候选人基础是否扎实的标准之一,因为通过HashMap可以引出很多知识点,比如数据结构(数组、链表、红黑树)、equals和hashcode方法,除此之外还可以引出线程安全的问题,HashMap是我在初学阶段学到的设计的最为巧妙的集合,里面有很多细节以及优化技巧都值得我们深入学习,本文将会涉及到以下问题 默认大小、负载因子以及扩容倍数 底层数据结构 如何处理hash冲突 如何计算key的hash值 数组长度为什么是2的幂次方 查找、插入、扩容过程 如果上面的都能回答出来的话那么这篇文章可能不太适合你,话不多说进入正文。注意:本文源码都是以JDK1.8版本讲解 数据结构 在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成(1.7版本是数组+链表) 当一个值中要存储到HashMap中的时候会根据Key的值来计算出他的hash,通过hash值来确认存放到数组中的位置,如果发生hash冲突就以链表的形式存储,当链表过长的话,HashMap会把这个链表转换成红黑树来存储,如图所示: 在看源码之前我们需要先看看一些基本属性 ...
- 下一篇
从阿里、腾讯的面试真题中总结了这11个Redis高频面试题
前言 现在大家的工作生活基本已经是回归正轨了,最近也是迎来了跳槽面试季,有些人已经拿到了一两个offer了。 这段时间收集了阿里、腾讯、百度、京东、美团、字节跳动等公司的Java面试题,总结了Redis系列的高频面试题:1、Redis持久化机制2、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题3、热点数据和冷数据是什么4、Memcache与Redis的区别都有哪些?5、单线程的redis为什么这么快6、redis的数据类型,以及每种数据类型的使用场景7、redis的过期策略以及内存淘汰机制8、Redis 为什么是单线程的9、Redis 常见性能问题和解决方案?10、为什么Redis的操作是原子性的,怎么保证原子性的?11、Redis事务 Redis系列高频面试题解析 Redis持久化机制 Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境