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,如需转载请自行联系原作者

相关文章
|
2月前
|
缓存 应用服务中间件 nginx
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
这篇文章讨论了在使用Nginx进行动静分离时遇到的静态资源更新不及时的问题。问题描述了在服务器上更新静态资源后,访问页面时页面没有显示更新的情况。文章提供了解决这个问题的方法,即清除浏览器缓存,并提供了相关参考文章链接。此外,还展示了问题复现的步骤和正常情况的预期结果。
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
|
2月前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
|
26天前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
77 5
|
2月前
|
监控 网络协议 应用服务中间件
高并发下Nginx压缩
【8月更文挑战第16天】gzip压缩在Nginx中可减少传输数据量,加快响应速度但消耗CPU。可在http、server及location级别配置。高并发时,启用Nginx状态监控以检查性能,配置`nginx.conf`添加`location /NginxStatus { stub_status on; access_log off; }`并重启Nginx
41 12
|
2月前
|
运维 算法 应用服务中间件
运维系列.Nginx中使用HTTP压缩功能(一)
运维系列.Nginx中使用HTTP压缩功能(一)
35 1
|
2月前
|
缓存 应用服务中间件 nginx
[nginx]proxy_cache缓存系统
[nginx]proxy_cache缓存系统
|
2月前
|
应用服务中间件 nginx
nginx配置gzip压缩
nginx配置gzip压缩
|
2月前
|
缓存 NoSQL 算法
【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析
【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析
|
3月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
|
2月前
|
存储 缓存 监控
Java本地高性能缓存实践问题之在EncacheTest示例中正确移除一个缓存实例的问题如何解决
Java本地高性能缓存实践问题之在EncacheTest示例中正确移除一个缓存实例的问题如何解决