文档章节

静态文件过期缓存、Nginx防盗链、访问控制

李超小牛子
 李超小牛子
发布于 02/17 21:06
字数 1182
阅读 23
收藏 1

防盗链

盗链

  • 盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

防盗链

  • 要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源,就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

防盗链实例

  • 设定目录访问受限,配置blog.abc.com网站目录的访问受限,编辑虚拟主机配置文件
vi /etc/nginx/conf.d/bbs.aaa.com.conf
  • 添加如下内容

location ~ \.(png|gif|jpeg|bmp|mp3|mp4|flv)$
    {
        valid_referers none blocked server_names *.aaa.com;
        if ($invalid_referer) {
                return 403;
        }
    }

  • 测试配置文件是否有错误,并重新加载配置文件

[root@localhost blog.abc.com]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost blog.abc.com]# nginx -s reload
  • 给blog.abc.com上传一个1.jpeg的图片
  • 使用curl -e 命令来模拟referer测试防盗链是否成功

[root@localhost blog.abc.com]# curl -e "http://wwww.baidu.com" -x127.0.0.1:80 blog.abc.com/1.jpeg -I
HTTP/1.1 403 Forbidden
Server: nginx/1.14.2
Date: Sun, 17 Feb 2019 12:43:02 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
[root@localhost blog.abc.com]# curl -e "http://bbs.aaa.com" -x127.0.0.1:80 blog.abc.com -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 17 Feb 2019 12:48:58 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.3.2
Link: <http://blog.abc.com/index.php?rest_route=/>; rel="https://api.w.org/"

Nginx访问控制

当我们的网站中有某一站点只是针对公司内部使用,禁止外网使用的时候可以使用访问控制来实现

  1. 编辑虚拟主机配置文件

     # vim /usr/local/nginx/conf/vhost/test.com.conf
    
  2. 添加如下内容

             allow 127.0.0.1;   //现实生产中,该白名单地址应设置为公司外网地址。
             deny all;
    
  3. 使用curl命令测试,可以看到,使用指定白名单ip可以正常访问,使用没指定过的ip访问该站点就会受到限制。

     # curl -x127.0.0.1:80 test.com/admin/1.jpg
     fangwen kongzhi ceshi `
     # curl -x192.168.254.131:80 test.com/admin/1.jpg
     <html>
     <head><title>403 Forbidden</title></head>
     <body bgcolor="white">
     <center><h1>403 Forbidden</h1></center>
     <hr><center>nginx/1.15.3</center>
     </body>
     </html>
    

设定指定目录下的PHP文件解析受限

  1. 编辑虚拟主机配置文件

     # vim /usr/local/nginx/conf/vhost/test.com.conf
    
  2. 添加内容

     location ~ .*(upload|image)/.*\.php$
     {
     deny all;
     }
    
  3. 在test.com目录下创建一个upload目录,并写一个PHP文件1.php

  4. 测试配置文件是否有问题,并重新加载

     # /usr/local/nginx/sbin/nginx -t
     nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
     nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
     [root[@localhost](https://my.oschina.net/u/570656) ~]# /usr/local/nginx/sbin/nginx -s reload
    
  5. 使用curl测试限制解析是否成功,可以看到返回的代码是403,表示限制解析成功

     [root[@localhost](https://my.oschina.net/u/570656) ~]# curl -x127.0.0.1:80 test.com/upload/1.php 
     <html>
     <head><title>403 Forbidden</title></head>
    

根据user_agent限制访问(可以拒绝网络爬虫爬走网站内容)

比如我想让谁访问我的网站,我就告诉他域名,如果不告诉别人域名,就说明我不想让他知道我的站点,这需要禁止搜索引擎在网络上爬取站点内容。可以通过user_agent来限制。

  1. 编辑虚拟主机文件

     [root[@localhost](https://my.oschina.net/u/570656) ~]# vim /usr/local/nginx/conf/vhost/test.com.conf
    
  2. 添加如下内容

     if ($http_user_agent ~* 'Spider/3.0|baidu|YoudaoBot|Tomato')
     {
     return 403;
     }
    
  3. 测试并重新加载配置文件 ..-t ...-s reload

  4. 使用curl测试,curl -A 可以模拟user_agent,发现返回的代码是403,表示实验成功。

     [root[@localhost](https://my.oschina.net/u/570656) ~]# curl -A "www.baidu.com" -x127.0.0.1:80 test.com -I
     HTTP/1.1 403 Forbidden
     Server: nginx/1.15.3
     Date: Tue, 04 Sep 2018 17:57:37 GMT
     Content-Type: text/html
     Content-Length: 169
     Connection: keep-alive
    

© 著作权归作者所有

共有 人打赏支持
李超小牛子
粉丝 6
博文 132
码字总数 143114
作品 0
通州
私信 提问
第五章:nginx静态+代理+缓存+负载均衡详解

一、静态资源WEB服务 非服务器动态运行生成的文件 配置语法-文件读取 配置语法-tcp_noposh(sendfile开启时,提高网络传输效率) 配置语法-tcp_nodelay 配置语法-压缩 扩展Nginx压缩模块 ht...

FantJ
2018/01/02
0
0
linux复盘:构架搭建lnmp(配置)

nginx虚拟主机 vim /usr/local/nginx/conf/nginx.conf 增加include vhost/*.conf; mkdir /usr/local/nginx/conf/vhost vim /usr/local/nginx/conf/vhost/aaa.com.conf #虚拟主机配置文件 如果......

历经35天的选择
2018/01/23
5
0
企业级Nginx服务基础到架构优化详解--25条

1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx...

MQ_douer
2017/05/22
0
0
企业级Nginx服务基础到架构优化详解--25条

1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx...

newthink
2016/10/26
0
0
nginx从入门到实践

花了一周时间了解nginx相关的知识,主要内容有: 基础知识: Nginx的快速部署安装、模块、基础配置语法,Nginx的日志输出、Nginx默认配置模块、Nginx做为http代理服务,介绍代理服务的类型,正...

898009427
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RadosClient OSDC

RadosClient.h class librados::RadosClient : public Dispatcher//继承自Dispatcher(消息分发类){public: using Dispatcher::cct; md_config_t *conf;//配置文件private: ......

banwh
51分钟前
1
0
如果让你写一个消息队列,该如何进行架构设计?

面试题 如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。 面试官心理分析 其实聊到这个问题,一般面试官要考察两块: 你有没有对某一个消息队列做过较为深入的原理的了解,或者...

李红欧巴
今天
5
0
错题

无知的小狼
今天
2
0
PowerShell因为在此系统中禁止执行脚本的解决方法

参考:window系统包管理工具--chocolatey 报错提示: & : 无法加载文件 C:\Users\liuzidong\AppData\Local\Temp\chocolatey\chocInstall\tools\chocolateyInstall.ps1,因为在此系统上禁止运...

近在咫尺远在天涯
今天
3
0
TP5 跨域请求处理

https://blog.csdn.net/a593706205/article/details/81774987 https://blog.csdn.net/wyk9916/article/details/82315700...

15834278076
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部