Nginx Tomcat 实现图片防盗链 解决404等 home 编辑时间 2019/04/15 ![](/api/file/getImage?fileId=5d527c5816199b2a52000b0b) ## 需求 关于网站静态资源 例如`js` `css` `json` `xml` 或者`图片` `视频` `音频` `压缩包` 等 很容易被别人盗链 也就是在他的网站里用你的js css 图片 从而造成网站速度被占用等情况 <br> 这里简单介绍一下我在nginx配置图片防盗链的过程 以及遇到错误404的解决方案 <br> ## 正文 我先是百度了一下,网上的例子大部分都是如下写法 ```shell location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers none blocke zzzmh.cn *.zzzmh.cn; if ($invalid_referer) { return 403; } } ``` <br> 但是在我实际情况中遇到3个问题 1. 这段东西应该放哪 2. 通配符 * 没有生效 3. 被选中的静态资源全部错误404 <br> 我对于这3个问题的理解 1. 放在location / {} 后面 2. 我也不知道。。。反正二级域名写全不就好了 3. 必须有相对路径或者绝对路径 例如root /路径/ <br> 最终解决方案如下 ```shell server { # 不相干的部分就省略了 listen ...; server_name ...; ... # 原来的代理对象 location / { ... } # 重点部分 # location 后面的扩展名代表拦截的文件类型 # root 代表这些文件的路径前缀,没有这个可能直接造成文件访问404 # expires 30d; 指的是客户端缓存 30天过期 # valid_referers 配置允许的访问域名来源 # 与4呼应,如果不是从4配置的域名过来的访问请求,直接403伺候 location ~* \.(ico|gif|jpg|png|jpeg|mp4|zip|svg|ttf|otf|eot|woff|woff2)$ { root /usr/http/blog/; expires 30d; valid_referers zzzmh.cn www.zzzmh.cn bz.zzzmh.cn chrome.zzzmh.cn leanote.zzzmh.cn; if ($invalid_referer) { return 403; } } # 这里和上面一样 # 区别是把常用到的过期时间设置短一点 # 例如7天 location ~* \.(js|json|css|xml)$ { root /usr/http/blog/; expires 7d; valid_referers zzzmh.cn www.zzzmh.cn bz.zzzmh.cn chrome.zzzmh.cn leanote.zzzmh.cn; if ($invalid_referer) { return 403; } } # 后面就不重要了 error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 /cat.html; location = /cat.html { root /usr/errorPage; } } ``` 送人玫瑰,手留余香 赞赏 Wechat Pay Alipay Chrome 73 安装crx扩展插件方法汇总,解决CRX HEADER INVALID Leanote 蚂蚁笔记 自建私人云服务简单流程 Centos 7.4