nginx实现动态/静态文件缓存(week4_day1_part2)-技术流ken
nginx实现静态文件缓存实战
1.nginx静态文件缓存
如果要熟练使用nginx来实现文件的缓存,那下面的几个指令你必须要牢记于心
指令1:proxy_cache_path
作用:设置缓存数据的相关信息 Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http 值:
path:缓存目录的位置
levels:指定使用几级缓存目录
keys_zone:指定缓存区域的名称和缓存空间的大小 例子:
proxy_cache_path /data/nginx/cache levels=: keys_zone=mycache:10m;
说明
:表示一级目录可以由1个字符来构成
:表示二级目录可以由4个字符来构成
mycache:是这个缓存区域的名称
10m:可以缓存10M大小的数据 缓存结果
/data/nginx/cache/c/29ad/b7f54b2df7773722d382f4809d65029c 说明
/data/nginx/cache/:这里是缓存目录
c:因为一级目录可以由1个字符构成,所有这里随机出现一个c
29ad:二级目录由4个随机字符构成
b7f54b2df7773722d382f4809d65029c:缓存的数据
指令2:proxy_cache
作用:调用缓存 Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
注意: 该指令写在不同的位置,缓存数据对象也不同
指令3:proxy_cache_min_uses
作用:指定一个文件至少需要被用户访问多少次以后,才会被缓存,默认1 Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses ;
Context: http, server, location
指令4:proxy_cache_purge
Syntax: proxy_cache_purge string ...;
Default: —
Context: http, server, location 使用场景:上游服务器中的资源发生了更改,但是缓存中的数据尚未过去,这个时候就需要手动执行purge让缓存中的数据过去
使用举例:
http {
proxy_cache_path /data/nginx/cache levels=: keys_zone=mycache:10m; server {
listen 10.220.5.196:;
location / {
proxy_pass http://10.220.5.180:80:
proxy_cache mycache;
....
....
} location = /cleanCache {
allow=
deny=
proxy_cache_purge mycache; #这里需要指定上面定义的缓存名称
...
...
...
}
}
}
指令5:proxy_cache_valid
作用:定义缓存数据的有效期 Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location 例子:
proxy_cache_valid 10m;
proxy_cache_valid 1h;
proxy_cache_valid any 1m;
指令6:proxy_cache_key
作用:指定缓存的key的名称 Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location 例子:
proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_key "$uri"
2.nginx实现缓存配置
1.环境准备
centos7.5
NGINX服务器端IP:172.20.10.8/28
HTTPD服务器端IP:172.20.10.7/28
HTTPD服务器端IP:172.20.10.9/28
客户端IP:172.20.10.4/28
2.nginx服务器端
使用yum下载nginx需要使用网络yum源,复制下面的代码到你的yum仓库即可下载
[ken]
name=ken
enabled=
gpgcheck=
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
下载nginx
[root@ken ~]# yum install nginx -y
配置nginx文件
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; events {
worker_connections 1024;
} http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048; include /etc/nginx/mime.types;
default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
#include /etc/nginx/conf.d/*.conf;
proxy_cache_path /ken levels=1:2 keys_zone=kenken:100m;
add_header host $server_addr;
add_header cachestatus $upstream_cache_status; #添加本条可以在浏览器中看到是否命中缓存
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html; # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf; location / {
proxy_pass http://172.20.10.7:80;
proxy_set_header host $host;
proxy_set_header realip $remote_addr; proxy_cache kenken;
proxy_cache_min_uses 3;
proxy_cache_valid any 10m;
}
}
}
创建缓存目录
[root@ken ~]# mkdir /ken
更改缓存目录的属主和属组
[root@ken ~]# chown -R nginx.nginx /ken
启动nignx
[root@ken ~]# systemctl start nginx
[root@ken ~]# ss -tnl | grep
LISTEN *: *:*
LISTEN ::: :::*
3.配置web服务端
下载httpd
[root@ken ~]# yum install httpd -y
准备测试文件
[root@ken ~]# echo "this is 172.20.10.7 for test">>/var/www/html/index.html
启动httpd
[root@ken ~]# systemctl restart httpd
4.浏览器测试
输入nginx服务器端的IP地址
输入172.20.10.8的地址成功访问172.20.10.7的页面
查看web服务器端的访问日志
[root@ken ~]# tail -f /var/log/httpd/access_log 172.20.10.8 - - [/Oct/::: +] "GET / HTTP/1.0" "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"
成功捕捉到来自172.20.10.8的访问请求
我们去查看nginx服务端是否已经有缓存产生
[root@ken /]# ls /ken/e//58be92261b4ffa2c4fe7e92be2f0255e
测试成功!
在nginx服务器端已经产生了缓存,再次刷新浏览器界面,在web服务器端都不会再产生访问日志,因为现在客户请求是直接从缓存提取的,没有再往后方节点来访问文件,这样可以大大提高网站的负载和并发能力。
nginx实现动态文件缓存实战
在完成了上面的静态文件缓存之后,相信动态文件的缓存对你来说也是轻而易举了,下面我们一鼓作气完成对动态文件的缓存吧。
1.环境准备
centos7.5
NGINX服务器端IP:172.20.10.8/28
WEB服务器端IP:172.20.10.9/28
2.配置nginx服务器端
下载php
[root@ken ~]# yum install php php-fpm -y
配置nginx文件
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; events {
worker_connections 1024;
} http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048; include /etc/nginx/mime.types;
default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
#include /etc/nginx/conf.d/*.conf;
fastcgi_cache_path /kenken levels=1:2 keys_zone=kenken:100m;
add_header host $server_addr;
add_header cachestatus $upstream_cache_status;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html;
index index.php;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf; location ~^/.*(\.php)$ {
fastcgi_pass 172.20.10.9:9000;
fastcgi_index index.php;
include fastcgi.conf; fastcgi_cache kenken;
fastcgi_cache_valid any 10m;
fastcgi_cache_key $request_uri;
}
}
}
创建缓存目录,并修改权限
[root@ken ~]# mkdir /kenken
[root@ken ~]# chown -R nginx.nginx /kenken
nginx语法检测
[root@ken ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
启动nginx
[root@ken ~]# systemctl restart nginx
3.配置web服务器端
下载所需服务程序
[root@ken ~]# yum install httpd php-fpm php -y
配置php-fpm
[root@ken ~]# vim /etc/php-fpm.d/www.conf
...
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 172.20.10.9:9000 #修改为本机ip地址 ; Set listen() backlog. A value of '-1' means unlimited.
; Default Value: -
;listen.backlog = - ; List of ipv4 addresses of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any
listen.allowed_clients = 172.20.10.8 #修改为nginx服务端地址
...
启动php-fpm
[root@ken ~]# systemctl restart php-fpm
[root@ken ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 172.20.10.9: *:*
准备动态测试文件
[root@ken ~]# cd /var/www/html/
[root@ken html]# ls
index.html
[root@ken html]# vim index.php
<?php
phpinfo();
?>
重启nginx
[root@ken ~]# systemctl restart nginx
浏览器输入nginx服务端ip地址进行测试
访问成功,刷新几次查看nginx是否已经产生缓存
[root@ken ~]# ls /kenken/
/ b/ e/
[root@ken ~]# ls /kenken/b/fe/c86156f7dcfecf44876ca30d1bac7feb
动态文件缓存成功!
nginx实现动态/静态文件缓存(week4_day1_part2)-技术流ken的更多相关文章
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken
项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...
- Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken
项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>.关于git,gitliab,ansible在我 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken
前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+A ...
- nginx静态文件缓存的解决方案
nginx的一大功能就是完成静态资源的分离部署,减轻后端服务器的压力,如果给这些静态资源再加一级nginx的缓存,可以进一步提升访问效率. 第一步:添加nginx.conf的http级别的缓存配置 # ...
- 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken
前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...
- htaccess 增加静态文件缓存和压缩
增加图片视频等静态文件缓存: <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$"> Header set Cache-Cont ...
- tomcat 6 利用ExpiresFilter控制静态文件缓存
在tomcat7下面 利用ExpiresFilter来控制静态文件缓存很方便,按照tomcat官网手动配置即可: 但是tomcat6 里面并没有 org.apache.catalina.filters ...
随机推荐
- vue的指令
我之前学了学angular 发现angular和vue的指令有点类似 先说一下 new Vue({ el: "#box", // element(元素) 当前作 ...
- Freeradius服务器的搭建流程
Freeradius服务器的搭建流程 一.服务器方面的配置 1 .安装radius服务器,数据库扩展插件 预先安装mysql数据库,然后安装freeradius,以及freeradius的数据库扩展插 ...
- 【python-时间戳】时间与时间戳之间的转换
对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块,具体的操作有如下的几种: 将时间转换 ...
- vue图片上传
之前花了两个月用vue做了一个建筑照片我的webApp,前端就我一人,负责用vue写页面对接接口,后台一个程序员负责写接口,嵌套个安卓ios的壳.搞的是风风火火,过程也是很心累,大多不在技术,在于所谓 ...
- Oracle数据库基本查询语句
--数据库连接 --普通用户连接:Conn scott/tiger --超级管理员连接:Conn "sys/sys as sysdba" --Disconnect; 断开连接 -- ...
- IDEA引入spring的命名空间
我们在写spring的配置文件的时候,有的时候可能会用到 P 标签,然后我们发现自己并没有p标签啊,那么我们一起来看我是怎么解决的. 首先在我们的xml文件的首部添上这句话: xmlns:contex ...
- 安卓端 - H5页面在微信分享、收藏、保存图片不成功
经过代码实践: 原因是微信在分享.收藏和保存时会获取到图片信息,当图片过大时,造成失败
- 6 week work 3
sticky vs fixed sticky:表示粘贴到某个位置.当组件设置了该属性值后,当页面滑动时,组件会跟着页面移动,当组件触及到窗体后,页面若继续滑动,组件则处在与窗体接触的位置不动.元素的定 ...
- C#常用工具类——Excel操作类(ZT)
本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...
- Python time库常用函数
time模块中时间表现的格式主要有三种: timestamp 时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 struct_time 时间元组,共有九个元素组. for ...