利用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 / {    #以下两行为重新定义或者添加发往后端服务器的请求头(在使用反向代理时经常用)    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;
    }

}

时间: 2024-10-14 03:50:05

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

Nginx 访问控制&屏蔽指定 user_agent

禁止非法恶意访问的IP [[email protected] ~]# vim /usr/local/nginx/conf/vhosts/linux.conf location ~ .*admin\.php$ { allow 127.0.0.1; deny all; #auth_basic "auth"; #auth_basic_user_file /usr/local/nginx/conf/.htpasswd; include fastcgi_params; fastcgi_pass

Puppet利用Nginx多端口实现负载均衡

随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现"time out"之类的报错,那这时有什么优化的办法吗?其实不然,我们可以利用Nginx多端口实现负载均衡,这样在很大程度上优化了puppet的处理能力. [51CTO原创稿件]随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现&

利用nginx实现文档服务器限速

在平时工作中,我们为了一些软件文档方便查看通常会搭建一些目录服务(类似yum源),为控制下载速度和下载总数,我们可以利用nginx的ngx_http_limit_conn_module模块. 首先在http段添加如下配置: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; 在对应的location中添加如下配置,虽然这个模块作用域可以是http,

django项目的生产环境部署,利用nginx+uwsgi

1.坏境准备 centos6.5 django项目 python坏境(python3.6,) 所需的各种模块(django,uwsgi,sqlite3)具体看坏境 我的测试django项目的数据库用的是sqlite,这里只是做部署, 重点是nginx的关于Django项目+uwsgi配置文件 本次的项目:teacher.zip 安装各种坏境 1.安装sqlite3 https://sqlite.org/2017/sqlite-autoconf-3180000.tar.gz tar sqlite-

如何利用Nginx的缓冲、缓存优化提升性能

使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接速度会影响客户的体验: 从客户机到Nginx代理的连接. 从Nginx代理到后端服务器的连接. Nginx具有优化这些连接调整其行为的能力. 如果没有缓冲,数据从代理的服务器发送并立即开始被发送到客户.如果假定客户端很快,缓冲可以关闭而尽快使数据到客户端,有了缓冲,Nginx 代理将暂时存储后端的响

[转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha_weii/article/details/81350087 学习一下如何使用sticky 版权声明:创作不易,转载请注明出处 https://blog.csdn.net/ha_weii/article/details/81350087 一,普通的负载均衡 1,启动nginx服务器 之前已经把/us

nginx 访问默认index.html首页跳转指定页面

nginx 访问默认index.html首页跳转指定页面 在server 段加入: rewrite ^/index.html(.*)$ /index.php permanent;

利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理

Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一篇关于利用Nginx进行负载均衡的文章(http://www.cnblogs.com/liping13599168/archive/2011/04/15/2017369.html). 本篇文章介绍怎样通过Nginx进行反向代理,并运行asp.net网站,测试环境我使用的是Win7系统. 首先,需要下

如何利用jquery在任意指定li元素后面插入新的li元素

如何利用jquery在任意指定li元素后面插入新的li元素:本章节介绍要一下如何利用jquery实现将一个新的li元素插入到任意li元素的后面.原生的javascript可以使用insertBefore()函数,具体可以参阅javascript的insertBefore.insertAfter和appendChild简单介绍一章节.下面介绍一下如何利用jquery实现此功能.代码实例: <!DOCTYPE html><html><head> <meta chars