nginx 配置静态缓存及静态缓存文件没有生成的问题及解决方案
作者:靳某某。
这篇文章主要介绍了nginx 配置静态缓存及静态缓存文件没有生成的问题及解决方案,本文分步骤结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
nginx 配置静态缓存全教程 (以及静态缓存文件没有生成)
一、第一步定义一个缓存目录设置目录结构
在 http 模块下定义(keys_zone = 缓存区名:后面是缓存区大小 inactive 不活跃的文件多久清理 max_size 缓存区所占磁盘的上限 use_temp_path 默认关闭(有需要自己百度))
proxy_cache_path /path/your_cache_dir levels = 1:2 keys_zone=your_cache_name:10g inactive=1h max_size=20g use_temp_path=off;
二、开启缓存
在 http、server、location 中开启代理缓存
举例在location中开启(将图片jscsshtml等放入缓存)
server { listen 8099; #缓存端口或者缓存域名 root /www/wwwroot/static/; index index.html; location ~*.\.(png|jpg|css|html)$ { expires 30m; #缓存过期时间在浏览器的缓存时间 proxy_pass http://localhost:8100; # 代理地址非缓存文件的访问地址,***必须加这个否则生成不来缓存这个*** proxy_cache your_cache_name; #proxy_cache_path中定义的名字 proxy_cache_valid 200 10m; #把状态值为200的缓存10分钟 proxy_cache_valid any 5m; #把状态值除来200的缓存5分钟 proxy_cache_key "$host$request_uri"; #默认key proxy_cache_revalidate on; #是否开启验证缓存的有效性关闭则缓存数据有变化依然请求缓存 开启则会请求新的 proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; #当后台出现错误时跳过 add_header X-Proxy-Cache $upstream_cache_status; #在头文件新增一个X-Proxy-Cache(自定义)验证缓存是否命中 Hit命中 miss 没有命中 } } server { listen 8100; #正式的地址 root /www/wwwroot/static/; index index.html; # 其他配置... }
注意事项
nginx 缓存叫代理缓存 应该是有两台以上的服务器。如果只有一台加不同的域名或者端口做区分。把后台服务器和缓存服务分开
缓存没有生成
1、文件夹是否有权限
2、是否设置了proxy_pass(只有走代理才会生成缓存)
Nginx缓存、静态文件缓存配置
Nginx静态Server基本配置
server { listen 80; #监听的端口 server_name www.test.com; #监听的域名 charset utf-8;#编码 root /usr/local/static/www.test.com; #主目录 index index.html index.htm;#欢迎页面 }
静态文件缓存配置
http { # 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量, # 建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓 存。 open_file_cache max=204800 inactive=20s; # open_file_cache 指令中的inactive 参数时间内文件的最少使用次数, # 如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个 # 文件在inactive 时间内一次没被使用,它将被移除。 open_file_cache_min_uses 1; # 这个是指多长时间检查一次缓存的有效信息 open_file_cache_valid 30s; # 默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不 # 少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压 缩 , # 如果要对html之外的内容进行压缩传输,我们需要手动来设置。 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css appl ication/xml; server { listen 80; server_name www.test.com; charset utf-8; root /data/www.test.com; index index.html index.htm; } }
基础缓存配置
proxy_cache_path/path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { ... location / { proxy_cache my_cache; proxy_pass http://my_upstream; } }
配置参数说明
proxy_cache_path 命令中的参数及对应配置说明如下: 1. 用于缓存的本地磁盘目录是 /path/to/cache/ 2. levels 在 /path/to/cache/ 设置了一个两级层次结构的目录。将大量的文件放置 在单个目录中会导致文件访问缓慢,所以针对大多数部署,我们推荐使用两级 目录层次结构。如果 levels 参数没有配置,则 Nginx 会将所有的文件放到同一 个目录中。 3. keys_zone 设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类 似计时器的用途。将键的拷贝放入内存可以使 Nginx 在不检索磁盘的情况下快 速决定一个请求是 HIT 还是 MISS ,这样大大提高了检索速度。一个 1MB 的内存空间可以存储大约 8000个key,那么上面配置的 10MB 内存空间可以存 储差不多 80000 个 key。 4. max_size 设置了缓存的上限(在上面的例子中是 10G)。这是一个可选项; 如果不指定具体值,那就是允许缓存不断增长,占用所有可用的磁盘空间。当 缓存达到这个上线,处理器便调用 cache manager 来移除最近最少被使用的 文件,这样把缓存的空间降低至这个限制之下。 5. inactive 指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的 例子中,如果一个文件在 60 分钟之内没有被请求,则缓存管理将会自动将其 在内存中删除,不管该文件是否过期。该参数默认值为 10 分钟(10m)。注 意,非活动内容有别于过期内容。 Nginx 不会自动删除由缓存控制头部指定的 过期内容(本例中 Cache-Control:max-age=120)。过期内容只有在 inactive 158静态文件服务 指定时间内没有被访问的情况下才会被删除。如果过期内容被访问了,那么 Nginx 就会将其从原服务器上刷新,并更新对应的inactive计时器。 6. Nginx 最初会将注定写入缓存的文件先放入一个临时存储区域, use_temp_path=off命令指示 Nginx 将在缓存这些文件时将它们写入同一个目 录下。我们强烈建议你将参数设置为off来避免在文件系统中不必要的数据拷 贝。use_temp_path在 Nginx 1.7版本和 Nginx Plus R6中有所介绍。 最终,proxy_cache 命令启动缓存那些URL与location部分匹配的内容(本例中, 为 / )。你同样可以将proxy_cache命令添加到server部分,这将会将缓存应用到 所有的那些location中未指定自己的proxy_cache命令的服务中。
到此这篇关于nginx 配置静态缓存及静态缓存文件没有生成的问题及解决方案的文章就介绍到这了,更多相关nginx 配置静态缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!