Nginx图片防盗链、缓存和压缩的示例

简介:

一、图片防盗链

   简单即是最好,最简单的方法是用ngx_http_referer_mmodule模块的valid_referers参数来构建,这也是最常见和最常用的方法:

1
2
3
4
5
6
7
8
9
location ~* \.(gif|jpg|jpeg|png|bmp|swf)$
       {
         valid_referers none blocked www. test .com  test .com;
         if  ($invalid_referer){
           rewrite ^/ http: //www . test .com /return .html;
           #return 403;
           }
         expires 15d;
        }

ngx_http_referer_mmodule模块参考:http://nginx.org/en/docs/http/ngx_http_referer_module.html


二、图片缓存

利用nginx的ngx_cache_purge模块和ngx_http_proxy_module模块进行构建;

ngx_cache_purge模块: http://wiki.nginx.org/CachePurgeChs

ngx_http_proxy_module模块: http://nginx.org/en/docs/http/ngx_http_proxy_module.html

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
user  nginx;
worker_processes 8;
error_log   /usr/local/webserver/nginx/logs/nginx_error .log  crit;
pid         /usr/local/webserver/nginx/nginx .pid;
#Specifies the value for maximum file descriptors that can be opened by thisprocess.
worker_rlimit_nofile 65535;
events
{
   use epoll;
   worker_connections 65535;
}
  
http
{
   include       mime.types;
   default_type  application /octet-stream ;
   charset  utf-8;
   server_names_hash_bucket_size 128;
   client_header_buffer_size 32k;
   large_client_header_buffers 4 32k;
   client_max_body_size 300m;
   sendfile on;
   tcp_nopush     on;
   keepalive_timeout 60;
   tcp_nodelay on;
   client_body_buffer_size  512k;
   proxy_connect_timeout    5;
   proxy_read_timeout       60;
   proxy_send_timeout       5;
   proxy_buffer_size        16k;
   proxy_buffers            4 64k;
   proxy_busy_buffers_size 128k;
   proxy_temp_file_write_size 128k;
   gzip  on;
   gzip_min_length  1k;
   gzip_buffers     4 16k;
   gzip_http_version 1.1;
   gzip_comp_level 2;
   gzip_types       text /plainapplication/x-javascript  text /css  application /xml ;
   gzip_vary on;
   #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
   proxy_temp_path    /data0/proxy_temp_dir ;
   #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为5GB。
   proxy_cache_path   /data0/proxy_cache_dir   levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=5g;
   
   server  #此处为缓存服务器
   {
     listen       80;
     server_name  your_server_ip;
  
     location /
     {
          proxy_cache cache_one;
          #对不同的HTTP状态码设置不同的缓存时间
          proxy_cache_valid  200 304 12h;
          #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
          proxy_cache_key  $host$uri$is_args$args;
          proxy_set_header Host  $host;
          proxy_set_header X-Forwarded-For  $remote_addr;
          proxy_pass http: //your_server_ip :8080;  #此处跳转到真实的图片服务器
          log_format cache  '***$time_local '
                     '$upstream_cache_status '
                     'Cache-Control: $upstream_http_cache_control '
                     'Expires: $upstream_http_expires '
                     '"$request" ($status) '
                     '"$http_user_agent" ' #定义日志格式(此日志格式可以显示hit miss等,显示缓存是否被击中,老版本默认可以,但是新版本,发现需要加上这个)
                   access_log   /var/log/nginx/cache .log cache;  #使用这个日志格式
                   expires      1d;
     }
     #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
     location ~  /purge (/.*)
     {
      #设置只允许指定的IP或IP段才可以清除URL缓存。
      allow            127.0.0.1;
      deny            all;
      proxy_cache_purge   cache_one$host$1$is_args$args;
     }
     #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
     location ~ .*\.(php|jsp|cgi)?$
     {
          proxy_set_header Host  $host;
          proxy_set_header X-Forwarded-For  $remote_addr;
    
     access_log  off;
  
#真实的图片服务器
server
{
   listen 8080; 
   server_name your_server_ip; 
   location /
   {
     root /;
   }
   access_log  /usr/local/webserver/nginx/logs/nginx_access .log;
}
}


三、图片压缩

ngx_cache_purge模块: http://nginx.org/en/docs/http/ngx_http_gzip_module.html

1
2
3
4
5
6
7
8
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  application /xml  application /x-httpd-php  image /jpeg  image /gif  image /png ;  
gzip_vary on; 
gzip_disable  "MSIE [1-6]\." ;

第1行:开启Gzip

第2行:不压缩临界值,大于1K的才压缩,一般不用改

第3行:buffer,就是,嗯,算了不解释了,不用改

第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1

第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧

第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了

第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧

第8行:IE6对Gzip不怎么友好,不给它Gzip了





本文转自 bannerpei 51CTO博客,原文链接:http://blog.51cto.com/281816327/1622385,如需转载请自行联系原作者

相关文章
|
6月前
|
缓存 应用服务中间件 nginx
百度搜索:蓝易云【nginx反向代理缓存教程。】
现在,nginx已经配置了反向代理缓存。它将缓存后端服务器的响应,并在下次请求时直接提供缓存的响应,减轻后端服务器的负载并提高性能。
192 1
|
5月前
|
应用服务中间件 nginx
nginx防盗链功能
nginx防盗链功能
|
2月前
|
缓存 JavaScript 前端开发
Nginx 缓存使用指南-简单
Nginx 缓存使用指南-简单
16 0
|
2月前
|
存储 Linux 应用服务中间件
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
120 1
|
2月前
|
存储 应用服务中间件 Linux
Linux安装nginx——完整示例
Linux安装nginx——完整示例
90 0
|
4月前
|
缓存 NoSQL Java
springboot集成图片验证+redis缓存一步到位2
springboot集成图片验证+redis缓存一步到位2
|
4月前
|
缓存 NoSQL Java
springboot集成图片验证+redis缓存一步到位
springboot集成图片验证+redis缓存一步到位
|
5月前
|
缓存 负载均衡 应用服务中间件
Nginx 的优化思路,并解析网站防盗链
Nginx 的优化思路,并解析网站防盗链
119 1
|
5月前
|
应用服务中间件 Shell nginx
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(二)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
负载均衡 NoSQL 应用服务中间件
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(一)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离