一、nginx实现静态文件缓存实战

1、nginx静态文件缓存

如果要熟练使用nginx来实现文件的缓存,那下面的几个指令你必须要牢记于心

(1)指令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=1:4 keys_zone=mycache:10m;
说明
1:表示一级目录可以由1个字符来构成
4:表示二级目录可以由4个字符来构成
mycache:是这个缓存区域的名称
10m:可以缓存10M大小的数据 缓存结果
/data/nginx/cache/c/29ad/b7f54b2df7773722d382f4809d65029c 说明
/data/nginx/cache/:这里是缓存目录
c:因为一级目录可以由1个字符构成,所有这里随机出现一个c
29ad:二级目录由4个随机字符构成
b7f54b2df7773722d382f4809d65029c:缓存的数据

(2)指令2:proxy_cache

作用:调用缓存

    Syntax:     proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
注意: 该指令写在不同的位置,缓存数据对象也不同

(3)指令3:proxy_cache_min_uses

作用:指定一个文件至少需要被用户访问多少次以后,才会被缓存,默认1

    Syntax:     proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location

(4)指令4:proxy_cache_purge

Syntax:     proxy_cache_purge string ...;
Default: —
Context: http, server, location 使用场景:上游服务器中的资源发生了更改,但是缓存中的数据尚未过去,这个时候就需要手动执行purge让缓存中的数据过去
使用举例:
http {
proxy_cache_path /data/nginx/cache levels=1:4 keys_zone=mycache:10m; server {
listen 10.220.5.196:80;
location / {
proxy_pass http://10.220.5.180:80:
proxy_cache mycache;
....
....
} location = /cleanCache {
allow=
deny=
proxy_cache_purge mycache; #这里需要指定上面定义的缓存名称
...
...
...
}
}
}

(5)指令5:proxy_cache_valid

作用:定义缓存数据的有效期

    Syntax:     proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location 例子:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;

(6)指令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=1
gpgcheck=0
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 80
LISTEN 0 128 *:80 *:*
LISTEN 0 128 :::80 :::*

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 - - [02/Oct/2018:22:40:43 +0800] "GET / HTTP/1.0" 200 29 "-" "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/55/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
...
10 ; '/path/to/unix/socket' - to listen on a unix socket.
11 ; Note: This value is mandatory.
12 listen = 172.20.10.9:9000 #修改为本机ip地址
13
14 ; Set listen(2) backlog. A value of '-1' means unlimited.
15 ; Default Value: -1
16 ;listen.backlog = -1
17
18 ; List of ipv4 addresses of FastCGI clients which are allowed to connect.
19 ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
20 ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
21 ; must be separated by a comma. If this value is left blank, connections will be
22 ; accepted from any ip address.
23 ; Default Value: any
24 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 0 128 172.20.10.9:9000 *:*

准备动态测试文件

[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/
1/ b/ e/
[root@ken ~]# ls /kenken/b/fe/c86156f7dcfecf44876ca30d1bac7feb

动态文件缓存成功!

Linux服务之nginx服务篇五(静态/动态文件缓存)的更多相关文章

  1. Linux基础系列:常用命令(6)_nfs服务与nginx服务

    NFS介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统 ...

  2. Linux基础系列:常用命令(5)_samba服务与nginx服务

    作业一:部署samba 每个用户有自己的目录,可以浏览内容,也可以删除 所有的用户共享一个目录,只能浏览内容,不能删 安装samba服务 1.准备环境 setenforce 0 2.安装软件包 yum ...

  3. samba服务和nginx服务

    一  samba服务 1 samba的功能:samba是一个网络服务器,是连接linux和windows之间共享文件的. 2 samba服务的启动,停止和重启: (1) 要启动Samba服务,只需用户 ...

  4. Samba服务与Nginx服务

    Samba服务: 1 准备环境 =====>part1: iptables -F 清楚防火墙配置 #systemctl disable firewalld #开机默认关闭 #systemctl ...

  5. springmvc基础篇—处理图片静态资源文件

    当我们在web.xml中对DispatcherServlet的过滤设置为/ 的时候,表示对所有的路径进行拦截过滤,那么不可避免的就会产生一个问题,那就是像图片这种静态资源文件我明明引用路径有,但就是加 ...

  6. Linux服务之nginx服务篇三(反向代理、负载均衡)

    一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...

  7. Linux服务之nginx服务篇一(概念)

    nginx官网:http://nginx.org/ 一. nginx和apache的区别 Nginx: 1.轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源. 2.抗并发,ng ...

  8. Linux服务之nginx服务篇二(搭建)

    一.简易搭建安装步骤 0.检查环境 1.配置yum源 使用yum list nginx 检查yum源中是否有nginx安装包 #官方网络源需要安装epel-* #或使用251的adv源(老师的yum源 ...

  9. Linux服务之nginx服务篇四(配置https协议访问)

    一.配置nginx支持https协议访问 编译安装nginx的时候需要添加相应的模块--with-http_ssl_module和--with-http_gzip_static_module(可通过/ ...

随机推荐

  1. 【Python学习笔记】-虚拟环境virtualenv

    在开发python应用程序的时候,系统安装的python3只有一个版本:3.4.所有的第三方的包都回被pip安装到python3的site-packages目录下. 如果我们要要同时开发多个应用程序, ...

  2. BUAA_OO_第一单元

    BUAA_OO_2020_UNIT1 一.程序结构分析 第一次作业 UML & Mertrics ​ 由于数据处理简单,第一次作业中笔者发挥了面向过程的思想,将项转换成Biginteger, ...

  3. joda-time的简单使用及mysql时间函数的使用(今天,本周,本月)

    近期在做一些首页的统计数据复习了下mysql的时间函数,以及后续修改成 传入时间查询时使用的joda-time 软件简介 JodaTime 提供了一组Java类包用于处理包括ISO8601标准在内的d ...

  4. Dapr | 云原生的抽象与实现

    引言 Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到今年2月正式发布 V1.0 版本.在不到一年半的时间内,github star 数达到了 1.2 万,超过同期的 kuberne ...

  5. CentOS8搭建FTP服务器

    2021.2.20 更新 1 概述 文章核心: CentOS8使用vsftpd搭建FTP服务器 安装以及测试的详细过程 2 安装 2.1 安装vsftpd+ftp sudo yum install - ...

  6. [kuangbin]专题六 最小生成树 题解+总结

    kuangbin专题链接:https://vjudge.net/article/752 kuangbin专题十二 基础DP1 题解+总结:https://www.cnblogs.com/RioTian ...

  7. Day01_09_数据类型

    数据类型 数据类型分类 *基本数据类型 *引用数据类型 基本数据类型 --第一类 整数型 byte short int long --第二类 浮点型 float double --第三类 布尔型 bo ...

  8. Day07_34_集合概述

    集合概述 * 主要集合概述 - 集合相当于现实世界中的容器,主要包含两种存放模式,一个一个的存(Collection), 一对一对存(Map[key,value]) - 集合中只能存储引用数据类型,不 ...

  9. 代码安全丨第六期:XPath注入漏洞样例

    1.什么是XPath注入漏洞? XPath是一种用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集. XPath注入是指程序使用外部输入动态构造用于从XML数据库检 ...

  10. 号外号外!DevUI Admin V1.0 发布啦!

    4月是鸟儿的月份,是木棉花的月份,是 DevUI Admin 发布的月份. 广受大家期待的 DevUI Admin 终于迎来了第一个开源 Angular 版本! DevUI Admin 是一个企业级中 ...