`

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

 
阅读更多

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

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

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

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

server层加入以下内容:

复制代码
#禁止Scrapy等爬虫工具的抓取
if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
  return 403;
}
#禁止指定UA及UA为空的访问
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的访问

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   (模拟浏览器头信息

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

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,放在站点根目录下。

http://tool.chinaz.com/robots/站点可以针对现在的搜索引擎按照想要的规则生成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

复制代码
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 / {
    #以下三行为重新定义或者添加发往后端服务器的请求头,nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换在使用反向代理时经常用,目的是为了使后端服务器获取客户端的真实IP地址
    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服务器    

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #把真实的客户端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|Windows Phone|Symbian)") {
            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;
    }

}
复制代码

 

分享到:
评论

相关推荐

    Nginx配置如何区分PC或手机访问不同域名

    在Nginx配置中,我们通常使用`if`语句和`rewrite`模块来根据不同的条件重写请求。例如,若想在移动端访问时重定向到另一个域名(如***),可以利用Nginx配置文件中的`if`语句,结合正则表达式匹配HTTP_USER_AGENT,...

    nginx 301 302重定向跳转配置.docx

    Nginx 301 302 重定向跳转配置 Nginx 是一个功能强大的 Web 服务器软件,它提供了丰富的配置选项,其中包括重定向跳转配置。本文档将详细介绍 Nginx 301 302 重定向跳转配置的实现方法。 一、Nginx 301 跳转设置 ...

    nginx常用内部错误.docx

    在 Nginx 配置文件中,可以使用 log_format 指令来定义访问日志的格式。例如: log_format main '$remote_addr $remote_user [$time_local] "$request" $http_host ' '$status $upstream_status $body_bytes_sent ...

    nginx 伪静态 重定向

    通过使用Nginx的重定向功能,尤其是301永久重定向,可以确保旧链接自动跳转至新位置,同时有助于保留原有的页面权重(如PR值),对提升网站的整体表现至关重要。 #### 3. Nginx重定向规则详解 Nginx的`rewrite`...

    Nginx 配置详解.docx

    此外,Nginx 还具备错误页面跳转、异常处理能力,当后端服务器出现故障时,它可以自动将请求重新分配给其他健康的服务器,并暂时屏蔽故障服务器。 ##### 2. 负载均衡 - **内置策略**:Nginx 提供了几种内置的负载...

    分布式+nginx+day3

    4. `return指令`:根据指定的状态码返回响应,可以结束当前请求的处理。 5. `rewrite指令`:实际执行URL重写的指令,通常与正则表达式结合使用。 6. `rewrite_log指令`:控制Rewrite的日志级别,帮助调试Rewrite...

    nginx配置PC站手机站分离实现重定向

    随着移动互联网的发展,越来越多的网站需要支持移动设备访问,这就要求网站能够根据访问设备的不同(如个人电脑PC和移动设备手机)提供不同的网页版本。为此,Nginx支持通过配置实现PC站和手机站的分离,并根据用户...

    Nginx rewrite跳转应用场景详解

    为了不影响用户访问,需要设置Nginx的Rewrite规则,确保旧域名请求自动跳转到新域名,同时保留原有的请求参数。 配置如下: ```nginx server { listen 80; server_name www.accp.com; # 添加以下Rewrite规则...

    实例讲解nginx的rewrite规则

    ### 实例讲解Nginx的rewrite规则 #### 正则表达式匹配 在Nginx中,使用`rewrite`指令可以实现对URL的重写,其中涉及到正则表达式的匹配方式有以下几种: 1. **区分大小写的匹配**:使用`~`符号,例如:`rewrite ^/...

    Nginx实现if多重判断配置方法示例

    nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现: 首先是伪代码(即不被nginx支持),写在这里只是为了方便理解: 代码如下: if ($remote_addr ~ “^(12.34...

    nginx访问控制的实现示例

    Nginx是一款高性能、轻量级的Web服务软件,以其稳定性高、系统资源消耗低以及对HTTP并发连接处理能力强而闻名。单台物理服务器在理想条件下可以支持30000到50000个并发请求。在本文中,我们将深入探讨如何在Nginx中...

    在nginx中使用geoip做区域限制的方法

    在Nginx中实现区域限制,主要是通过识别用户的IP地址来判断其所在地理位置,然后根据地理位置信息来决定用户的访问权限或跳转到不同的页面。GeoIP是一个常用的第三方模块,专门用于在Web服务器中进行地理位置查找。...

    Nginx日志管理介绍

    通过分析访问日志,可以得到用户地域来源、跳转来源、使用终端(如PC或移动设备)、某个URL访问量等相关信息。而错误日志则有助于运维人员发现系统中可能存在的性能瓶颈或服务故障,例如,通过错误日志可以迅速定位...

    关于nginx+uWsgi配置遇到的问题的解决

    例子中列举了一些常见的爬虫标识符,当请求的`User-Agent`匹配到这些值时,`nginx`会返回503或403状态码,阻止它们访问网站。这有助于保护服务器资源,防止过度爬取。 3. **实现HTTP到HTTPS的自动重定向** 对于...

    开源基础架构和集群最佳实践

    根据题目中的描述,我们使用两台CentOS 6.5虚拟机作为测试平台。 ##### 1、测试环境交代 - **主机1**: IP地址为192.168.153.132/24 - **主机2**: IP地址为192.168.153.152/24 - **浮动IP地址**: 192.168.153.188/...

    nginx rewrite重写规则与防盗链配置方法教程详解

    Nginx是一个高性能的HTTP和反向代理服务器,以及IMAP/POP3/SMTP服务器。它由于具有配置简单、性能高效、资源消耗低、稳定性强等优点,广泛应用于互联网上的高并发和静态数据处理。Nginx中的rewrite模块用于实现复杂...

    清爽干净的下载单页源码

    涉及到的“安卓、苹果自动识别”技术通常基于用户代理(User-Agent),这是一种浏览器发送给服务器的信息,包含了设备类型、操作系统和浏览器版本等数据。通过解析这些信息,服务器可以判断用户设备,并提供适合的...

    详解vue填坑之解决部分浏览器不支持pushState方法

    然而,存在一些浏览器版本兼容性问题,特别是部分低版本的手机浏览器、部分app以及IE9浏览器不支持history模式的必要方法pushState。 pushState是HTML5历史API的一部分,该API允许我们改变浏览器地址栏中的URL而不...

Global site tag (gtag.js) - Google Analytics