服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - 使用Nginx作缓存服务器以及删除其缓存文件的方法

使用Nginx作缓存服务器以及删除其缓存文件的方法

2019-11-04 14:26goldensun Nginx

这篇文章主要介绍了使用Nginx作缓存服务器以及删除其缓存文件的方法,作cache时需要注意一下磁盘的IO瓶颈,需要的朋友可以参考下

使用nginx做cache服务器

需求就是缓存android的软件包,后缀名是apk。话不多说,直接上配置,供参考:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
a-->nginx.conf
user www www;
worker_processes 8;
error_log /data/logs/nginx_error.log crit;
pid    /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
 
events
{
 use epoll;
 worker_connections 204800;
}
 
http
{
  include    mime.types;
  #apk 文件类型
  #default_type application/vnd.android.package-archive;
  default_type application/octet-stream;
 
  charset utf-8;
 
  server_names_hash_bucket_size 128;
  client_header_buffer_size 2k;
  large_client_header_buffers 4 4k;
  client_max_body_size 8m;
 
  sendfile on;
  tcp_nopush   on;
 
  keepalive_timeout 60;
  open_file_cache max=204800 inactive=20s;
  open_file_cache_min_uses 1;
  open_file_cache_valid 30s;
 
 
 
  tcp_nodelay on;
  client_body_buffer_size 512k;
  
  #跟后端服务器连接的超时时间_发起握手等候响应超时时间
  proxy_connect_timeout 600;
  #连接成功后_等候后端服务器响应的时间_其实已经进入后端的排队之中等候处理
  proxy_read_timeout 600;
  #后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有数据
  proxy_send_timeout 600;
  #代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
  proxy_buffer_size 16k;
  #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
  proxy_buffers 4 64k;
  #如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
  proxy_busy_buffers_size 128k;
  #proxy缓存临时文件的大小
  proxy_temp_file_write_size 128k;
 
  gzip on;
  gzip_proxied expired no-cache no-store private auth;
  gzip_min_length 1k;
  gzip_buffers   4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 3;
  gzip_types    text/plain application/x-javascript text/css application/xml;
  gzip_disable "MSIE [1-6]\.";
  gzip_vary on;
 
  #log_format access '$remote_addr - $remote_user [$time_local] '
  #          '"$request" $status $body_bytes_sent '
  #          '"$http_referer" "$http_user_agent" '
  #          '$host $request_time $http_x_forwarded_for';
  #access_log /data/logs/http.a.log;
  #error_log /data/logs/http.e.log;
 
  include vhosts/cache.peiqiang.net.conf;
}
 
upstream source_site {
  server 192.168.1.1:80 weight=7 max_fails=2 fail_timeout=30s;
  server 192.168.1.2:80 weight=4 max_fails=2 fail_timeout=30s;
}
 
b-->cache.peiqiang.net.conf
#用于指定本地目录来缓冲较大的代理请求
proxy_temp_path /data/soft/temp;
#设置web缓存区名为cache_one,内存缓存空间大小为12000M,自动清除超过15天没有被访问过的缓存数据,硬盘缓存空间大小200g
proxy_cache_path /data/soft/cache levels=1:2 keys_zone=cache_one:12000m inactive=15d max_size=200g;
 
server {
   listen 80;
   server_name cache.peiqiang.net;
   access_log /data/logs/a.log;
   error_log  /data/logs/e.log notice;
 
   # PHP Scripts is NOT allowed within this site!
   location ~* \.(php|php5|jsp|asp|aspx)$ {
     deny all;
   }
 
 
   location / {
 
     proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
     proxy_cache cache_one;
     proxy_cache_valid 200 304 12h;
     proxy_cache_key $uri$is_args$args;
 
     #反向代理,访问后端内容源服务器
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_pass http://source_site;
   }
 
   location ~* .*\.(apk)$ {
     error_page 302 404 = @fallback;
 
     #如果后端的服务器返回500、502、503、504执行超时等错误、自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
     proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
 
     #使用web缓存区cache_one
     proxy_cache cache_one;
 
     #对不同的HTTP状态码缓存设置不同的缓存时间
     proxy_cache_valid 200 304 12h;
 
     #设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名、URI、参数"组合成key
     proxy_cache_key $uri$is_args$args;
 
 
     #反向代理,访问后端内容源服务器
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_pass http://source_site;
     expires 1d;
   }
 
   location @fallback {
     rewrite ^ $scheme://apke.peiqiang.net$uri redirect;
     expires -1;
   }
}


说明:其实按这个配置location /这个匹配是多余的,因为过来一个后缀名为apk的软件包location ~* .*\.(apk)$已经给匹配上了,不会再到location /了,不过由于我们还会缓存些其他后缀名的文件,所以location /就是必须的。

?
1
2
3
4
5
6
7
8
9
10
c-->/etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
 
touch /var/lock/subsys/local
ulimit -HSn 65535
/usr/local/nginx/sbin/nginx

删除nginx缓存文件
一:脚本

a shell版

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash
 
#Date: 2013-06-27
#Auther: budong
 
#######################################################
#说明:
#  1.本脚本用于清除nginx缓存文件
#  2.查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $uri$is_args$args;
#  因此nginx会根据$uri$is_args$args作为key进行hash,因此可以模拟nginx对一个key进行再
#  hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)
#  3.缓存设置 proxy_cache_path /data/mumayi/cache levels=1:2 keys_zone=cache_one:6000m inactive=15d max_size=200g;
#  根据相应的配置,请做相应修改测试
#  4.uri格式请按照同级目录下rm_apk_list.txt中填写
#####################################################
 
while read -r line
do
  md5uri=`echo -n $line | md5sum | awk '{ print $1 }'`
  filepath=`echo "$md5uri" | awk '{print "/data/mumayi/cache/"substr($0,length($0),1)"/"substr($0,length($0)-2,2)"/"$0}'`
  rm -rf $filepath
done < /root/sbin/rm_apk_list.txt
b python版
 
#!/usr/local/python2.7/bin/python2.7
# -*- coding:utf8 -*-
 
#Date: 2013-06-26
#Name: budong
 
'''
说明:
  1.本脚本用于清除nginx缓存文件
  2.查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $uri$is_args$args;
  因此nginx会根据$uri$is_args$args作为key进行hash,因此可以模拟nginx对一个key进行再
  hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)
  3.缓存设置 proxy_cache_path /data/mumayi/cache levels=1:2 keys_zone=cache_one:6000m inactive=15d max_size=200g;
  根据相应的配置,请做相应修改测试
  4.uri格式请按照同级目录下rm_apk_list.txt中填写
'''
import os
import sys
try:
  from hashlib import md5
except:
  from md5 import md5
 
reload( sys )
sys.setdefaultencoding('utf-8')
 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
URI_FILE = ''.join([PROJECT_ROOT,'/rm_apk_list.txt'])
 
def nginx_purge(uri):
  m = md5()
  m.update("%s" % uri)
  md5uri=m.hexdigest()
  md5uri_len=len(md5uri)
  dir1=md5uri[md5uri_len-1:]
  dir2=md5uri[md5uri_len-3:md5uri_len-1]
  file_path=("/data/mumayi/cache/%s/%s/%s" % (dir1, dir2, md5uri))
  if os.path.exists(file_path):
    os.remove(file_path)
 
with open("%s" % URI_FILE,'r') as uri_file:
  for line in uri_file:
    line = line.rstrip()
    nginx_purge(line)

c ngx_cache_purge不做考虑,据说已经停止开发了

说明:

1 我的 /root/sbin/rm_apk_list.txt 文件

?
1
2
[root@budong ~]# cat /root/sbin/rm_apk_list.txt
/2013/08/15/38/382272/shuazanzhushou_V1.8.16_mumayi_95a91.apk

2 查看一个缓存对象,应该有些明白了吧

?
1
[root@budong ~]# more /data/mumayi/cache/0/00/db9327b60a6b3c164516117f90d9d000
?
1
2
3
4
5
6
7
8
9
10
11
KEY: /2013/10/23/43/432816/dinuochongwuDinoPets_V1.1.1_mumayi_0b399.apk
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Sun, 15 Dec 2013 19:51:22 GMT
Content-Type: application/vnd.android.package-archive
Content-Length: 37466293
Connection: close
Last-Modified: Wed, 23 Oct 2013 06:15:06 GMT
Expires: Wed, 18 Dec 2013 17:35:07 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes

 

延伸 · 阅读

精彩推荐
  • Nginx如何优化Nginx的处理性能

    如何优化Nginx的处理性能

    Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性,在连接高并发的情况下,Nginx是Apache服务不错的替代品。其特点是占有内存少,...

    Dockone.io5142020-12-11
  • Nginx利用nginx和腾讯云免费证书制作https的方法

    利用nginx和腾讯云免费证书制作https的方法

    这篇文章主要介绍了利用nginx和腾讯云免费证书制作https的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    dalaoyang5992019-12-30
  • NginxNginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    盗哥泡茶去了3382020-09-27
  • NginxNginx location 和 proxy_pass路径配置问题小结

    Nginx location 和 proxy_pass路径配置问题小结

    本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,进行测试,完全还原了整个测试过程,本文给大家介绍Nginx location 基本配置及相关配...

    自由早晚乱余生18742021-09-24
  • Nginxnginx ssl免密码重启教程详解

    nginx ssl免密码重启教程详解

    这篇文章给大家介绍了nginx 如何启动以及nginx ssl 免密码重启 的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧 ...

    mrr4272019-11-19
  • Nginx通过Nginx规则重写URL去掉index.php不显示index.php

    通过Nginx规则重写URL去掉index.php不显示index.php

    Nginx不仅占用内存少,并发能力强,而且拓展功能丰富,可以通过安装模板来强化功能,也能通过规则优化,优化服务器并发处理能力,是建站的不二之选...

    Genius日记5872020-10-16
  • NginxNginx Rewrite使用场景及代码案例详解

    Nginx Rewrite使用场景及代码案例详解

    这篇文章主要介绍了Nginx Rewrite使用场景及代码案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    盗哥泡茶去了11862020-09-27
  • Nginxnginx rewrite 伪静态配置参数和使用例子

    nginx rewrite 伪静态配置参数和使用例子

    nginx下伪静态配置参数详细说明,使用nginx的朋友,nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 ...

    服务器之家3102019-10-08