Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用nginx来屏蔽指定的user_agent的访问以及根据user_agent做跳转

利用nginx来屏蔽指定的user_agent的访问以及根据user_agent做跳转

原创
作者头像
用户1349575
发布于 2022-02-22 05:03:38
发布于 2022-02-22 05:03:38
5.9K00
代码可运行
举报
文章被收录于专栏:编程社区编程社区
运行总次数:0
代码可运行

对于做国内站的我来说,我不希望国外蜘蛛来访问我的网站,特别是个别垃圾蜘蛛,它们访问特别频繁。这些垃圾流量多了之后,严重浪费服务器的带宽和资源。通过判断user agent,在nginx中禁用这些蜘蛛可以节省一些流量,也可以防止一些恶意的访问。

方法一:修改nginx.conf,禁止网络爬虫的user_agent,返回403。

1、进入nginx的配置目录,例如cd /usr/local/nginx/conf

2、添加agent_deny.conf配置文件 vim agent_deny.conf

server层加入以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#禁止Scrapy等爬虫工具的抓取
if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
  return 403;
}
#禁止指定UAUA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
{
  return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

还有加一些针对特殊的user_agent的访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") { 
   return 404;
}

然后测试一下 设置是否成功,curl的-A 可以让我们随意指定自己这次访问所宣称的自己的浏览器信息

#curl -I -A "BaiduSpider" www.test.com   (模拟浏览器头信息)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 09 Feb 2015 03:37:20 GMT
Content-Type: text/html; charset=UTF-8 Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.19 Vary: Accept-Encoding, Cookie
Cache-Control: max-age=3, must-revalidate
WP-Super-Cache: Served supercache file from PHP

#curl -I -A "JikeSpider" www.test.com

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 403 Forbidden
Server: nginx Date: Mon, 09 Feb 2015 03:37:44 GMT
Content-Type: text/html
Content-Length: 162 Connection: keep-alive

到这里,nginx通过判断User-Agent屏蔽蜘蛛访问网站就已经完成,可以根据实际情况对agent_deny.conf中的蜘蛛进行增加、删除或者修改。

方法2:网站更目录下增加Robots.txt,放在站点根目录下。

站点可以针对现在的搜索引擎按照想要的规则生成robots.txt文件。

知识扩展:

robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

Robots协议是国际互联网界通行的道德规范,基于以下原则建立:

1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;

2、网站有义务保护其使用者的个人信息和隐私不被侵犯。

当然,如果搜索引擎不遵守约定的Robots协议,那么通过在网站下增加robots.txt也是不起作用的。(在正式环境中,可以适当允许搜索引擎抓取收录)

-----------------------------------------------------------------------------------------------------------------------------

Nginx也可实现根据访问源的设备类型进行判断并跳转到不同的tomcat或其它项目中

vim /usr/local/nginx/conf/conf.d/mobile.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream mobileserver {
    server 10.0.10.48:8089 max_fails=3 fail_timeout=60 weight=1;
    server 10.0.10.49:8089 max_fails=3 fail_timeout=60 weight=1;
    server 10.0.10.50:8089 max_fails=3 fail_timeout=60 weight=1;
}
upstream computerserver {
    server 10.0.10.48:8080 max_fails=3 fail_timeout=60 weight=1;
    server 10.0.10.49:8080 max_fails=3 fail_timeout=60 weight=1;
    server 10.0.10.50:8080 max_fails=3 fail_timeout=60 weight=1;
}
server {
    listen       80;
    server_name  house.wjoyxt.com;
    rewrite_log     on;
    if ($request_uri ~ " ") {
         return 444;
    }
    location / {
    #以下两行为重新定义或者添加发往后端服务器的请求头(在使用反向代理时经常用)
    proxy_set_header Host      $host;           #如果不想改变请求头“Host”的值,可以这样来设置:proxy_set_header Host $http_host;但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,更好的方式是使用$host变量——它的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名
    proxy_set_header X-Real-IP $remote_addr;    #把真实的客户端ip发送给后端的web服务器    
    access_log  /data/logs/nginx/mobile.access.log  main;
    error_log  /data/logs/nginx/mobile.error.log;
    
    set $client    "";
    
    #如果是IPhone设备、iPad设备、iPod设备、苹果其它非PC设备、苹果PC设备
         if ( $http_user_agent ~* "(iPhone|iPad|iPod|iOS|Android|Mobile|nokia|samsung|htc|blackberry)") {
            set $client "1";
          }        
        if ($client = '1') {
              proxy_pass http://mobileserver;
              break;
        }
        if (!-f $request_filename) {
              proxy_pass http://computerserver;
               break;
        }
    }
    location ~ \.php$ {
        proxy_pass   http://127.0.0.1;
    }
    location ~* \.(html|shtml|htm|inc|log)$ {
            expires 1m;
    }
    location ~* ^.+\.(jpg|jpeg|gif|swf|mpeg|mpg|mov|flv|asf|wmv|avi|ico)$ {
            expires 15d;
    }

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx如何配置网络防攻击策略(DDoS)
DDoS:Distributed Denial of Service,即分布式拒绝服务攻击。借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
一个风轻云淡
2024/07/19
3420
Nginx限制某个IP同一时间段的连接次数和请求数
nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数.
拓荒者
2019/03/15
3.5K0
nginx关于限制请求数和连接数
nginx轻巧功能强大,能承受几百并发量,ddos攻击几乎没有影响到nginx自身的工作,但是,太多的请求就开始影响后端服务了。所以必须要在nginx做相应的限制,让攻击没有到后端的服务器。这里阐述的是能在单位时间内限制请求数的ngx_http_limit_req_module模块和nginx限制连接数的ngx_http_limit_conn_module模块。安装模块这些简单的步骤这里就不介绍了,就介绍一下配置的参数,希望对大家有用。
一夕如环
2018/08/08
1.9K0
Nginx限流
有好几个业务要访问ES集群。有些业务比较紧急,那么它们的请求应该优先处理,而有些业务对响应时间的要求不是那么在意,则可降低他们的并发量。针对于这种情况,可通过nginx的lua脚本来控制并发。 1 控制每个ip或者域名的并发量 http { limit_conn_zone $binary_remote_addr zone=perip :10m; limit_conn_zone $server_name zone=perserver:10m; ... server {
YG
2018/05/23
2.3K0
Nginx限制IP访问频率
最近网站经常出现假死的状态,重启nginx可恢复,但是短时间后又出现,经过排查日志发现,有一个 IP 存在过度频繁请求的情况,十分钟左右的时间请求了12000次左右,导致了服务器资源无法释放,所以产生了假死现象。
fastmock
2022/07/13
6.8K0
《前端运维》二、Nginx--2请求处理流程及核心模块
  前一篇内容,我们学习了nginx的一些基本概念、安装和目录的作用。这篇文章我们来学习一些更加深入的内容。
zaking
2022/05/10
4620
《前端运维》二、Nginx--2请求处理流程及核心模块
利用 Nginx 实现限流
Nginx为我们提供了请求限制模块(ngx_http_limit_req_module)、基于令牌桶算法的流量限制模块(ngx_stream_limit_conn_module),可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制…
Java_老男孩
2019/12/02
5540
如何对服务器做IP限流
前几天公司的统计出现了问题:大致是我们自己统计模块的数据和第三方的数据出现了比较大的偏差——公司的统计量级异常的大。我们怀疑有人直接拿上报接口去刷量,如果服务器性能撑的过去的话数据不准了还好,但万一刷量过大,击垮了服务器,这就是典型的ddos啊。于是我们把这个问题排上了日程。
OwenZhang
2021/12/07
2.5K0
Nginx 限制并发连接和并发请求数配置
--without-http_limit_conn_module disable ngx_http_limit_conn_module
授客
2019/09/11
2.6K0
Nginx 限制并发连接和并发请求数配置
Nginx配置对同一IP限速限流
 Nginx通过limit_conn_zone和limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击,这类文章网上比较多,但是limit_req_zone中burst漏桶原理说得清楚的却很少。
lyb-geek
2018/12/28
3.2K0
利用 Nginx 实现限流
Nginx为我们提供了请求限制模块( ngx_http_limit_req_module)、基于令牌桶算法的流量限制模块( ngx_stream_limit_conn_module),可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制...
battcn
2018/08/03
1.6K0
【高并发】面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
1.1K0
【高并发】面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!
Nginx 配置对流量、连接和请求的限制
  limit_rate开启nginx限速功能,可配置在http、server、location和if in location配置段。 limit_rate 500k表示限速500kB每秒,限速对象是单个连接,因此如果一个IP有多个连接的话,每个连接都是限速500k。limit_rate还有在特定情况下开启限速的功能。
拓荒者
2019/03/15
2.6K0
Nginx 配置对流量、连接和请求的限制
Nginx之客户并发数限制解读
在我们进行系统开发设计中,要考虑服务器流量异常,负载过大等问题。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制。
一个风轻云淡
2023/09/28
1.8K0
Nginx 限流模块
【转载请注明出处】:https://cloud.tencent.com/developer/article/1623156
后端老鸟
2020/05/02
1.5K0
Nginx 限流模块
Tengine/Nginx限速简介及配置
Nginx主要有两种限速方式:按连接数限速(ngx_http_limit_conn_module)、按请求速率限速(ngx_http_limit_req_module)。超出限制的请求会直接拒绝,可防御简单的cc攻击
4xx.me
2022/06/09
8560
Tengine/Nginx限速简介及配置
nginx限制请求数(ngx_http_limit_req_module)模块
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wanglei_storage/article/details/51076882
拓荒者
2019/03/15
2.2K0
nginx限制请求数(ngx_http_limit_req_module)模块
nginx 如何限制访问频率,下载速率和并发连接数
ngx_http_limit_req_module 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket” ngx_http_limit_conn_module 用来限制同一时间连接数,即并发限制 limit_rate和limit_rate_after 下载速度设置
Linux运维技术之路
2022/06/07
3.8K0
nginx 如何限制访问频率,下载速率和并发连接数
《前端运维》二、Nginx–2请求处理流程及核心模块
  前一篇内容,我们学习了nginx的一些基本概念、安装和目录的作用。这篇文章我们来学习一些更加深入的内容。
全栈程序员站长
2022/07/21
2300
《前端运维》二、Nginx–2请求处理流程及核心模块
接入层限流之ngx_http_limit_req_module
【转载请注明出处】:https://cloud.tencent.com/developer/article/1626336
后端老鸟
2020/05/10
8810
接入层限流之ngx_http_limit_req_module
相关推荐
Nginx如何配置网络防攻击策略(DDoS)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验