一、图片防盗链

简单即是最好,最简单的方法是用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,如需转载请自行联系原作者

Nginx图片防盗链、缓存和压缩的示例相关推荐

  1. Nginx 图片防盗链

    2019独角兽企业重金招聘Python工程师标准>>> 在server中配置如下: location ~* b(?!logob)w+.(gif|jpg|png|swf|flv)$ { ...

  2. 【Nginx】Nginx实现图片防盗链

    目录 Nginx有三种方法可以进行防盗链 1.对Nginx下所有项目的指定资源不同文件类型进行防盗链 2.对指定目录或者指定项目目录进行防盗链 3.nginx 的第三方模块ngx_http_acces ...

  3. lnmp/nginx系统真正有效的图片防盗链完整设置详解

    http://www.it300.com/article-15345.html 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! ...

  4. 防盗链Nginx设置图片防盗链

    切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片. 一.全站图片防盗链 在/usr/local/nginx/conf/nginx. ...

  5. Nginx(七)防盗链

    一   基本铺垫 盗链的理解 ①  什么是盗链 盗链就是'盗用'别的网站的'链接'1)'大佬'建一个网站,'提供下载'以提高自己知名度和吸引力,这样你就必须有'空间存储'那些供人们下载的资源2)'不劳 ...

  6. Nginx配置防盗链

    Nginx配置防盗链 进入Nginx配置文件: [root@LHQ vhosts]# vim test.conf server { listen 80; server_name www.test.co ...

  7. 配置Nginx的防盗链,实现网站资源防盗

    前言   在项目中,经常会有不想让本站点的静态资源被他人盗取访问的需求.比如网站中的图片,前端加载的一些js文件等.此时,就可以配置nginx的防盗链来实现网站资源的防盗. 当然,此方案的前提是前端资 ...

  8. Nginx下载防盗链(迅雷等下载软件)

    什么是下载盗链   假设我们是一个B站,有些视频资源是可以提供给用户下载的.这时迅雷等其他下载软件,也提供下载该视频的服务, 但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载.占用我们的带宽来 ...

  9. LAMP架构之nginx:nginx重定向+防盗链

    LAMP架构之nginx:nginx重定向+防盗链 一.nginx重定向 1.防止域名恶意解析到服务器IP,rewrite(URL重定向) 2.重定向做全站加密 3.网站的整体迁移 二.nginx防盗 ...

最新文章

  1. pytorch bceloss测试
  2. TOPCODER SAM 686 div1 300
  3. 解决Cesium无法加载出地球的问题
  4. PE文件格式--------------导出表
  5. SAP Spartacus B2B Unit page Expand all按钮的工作原理
  6. 第1篇:Flowable简介
  7. 弗拉门戈-吉普赛婚礼-保利剧院
  8. insertBefore方法(javascript与jQuery)
  9. r 语言初学者指南_自然语言处理初学者指南
  10. JSZip的简单使用
  11. matlab传递函数状态方程转换,利用matlab对状态方程与传递函数转换
  12. 夜神模拟器连不上android studio了
  13. raspbain系统连接家庭wifi的配置方法
  14. html+css基础教程入门之CSS 尺寸
  15. 帝国站长php主动推送,帝国CMS 链接主动推送插件设置帮助
  16. 凸包 初学 Andrew 和 Melkman (模板) 旋转卡(qia)壳(ke)
  17. ChatGPT、文心一言、New Bing到底哪个更AI?
  18. 功放限幅保护_为什么要对放大器限幅?
  19. 如何解决mac拔掉耗电量太大的设备以重新启用usb设备
  20. sqlserver/mysql 替换部分位置的字符串

热门文章

  1. 无线扩展器怎么连接好友服务器失败怎么办,tplink无线扩展器怎么设置 tplink无线扩展器设置方法...
  2. 485不用双绞线可以吗_刘兴亮丨有了北斗,中国可以不用GPS吗
  3. postman电脑版无法安装_Postman 安装及使用入门教程
  4. jQuery的创建对象,动态添加、修改、删除属性和方法
  5. python列表输出字符串,如何在python中输出utf-8字符串列表?
  6. spss多元线性回归散点图_案例分析 | 多元线性回归及SPSS操作
  7. 2019小程序没必要做了_企业发展小程序的必要原因
  8. Linux系统下网卡网络配置基础
  9. TensorFlow可以“预装”数据集了,新功能Datasets出炉
  10. 肖健雄的无人车公司AutoX,现在要在美国配送生鲜了