nginx 中禁止爬虫

模拟 抓取:

curl -I -A ‘Baiduspider‘ hello.net

产生的效果:

HTTP/1.1 200 OK 
                    Server: nginx

Date: Wed, 20 May 2015 07:26:48 GM

以上说明允许爬虫

如果是 HTTP/1.1 403  forbidden

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

方法 1,

在server段中书写

多种http user agent 用管道  |

server {

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot")

{  
        return 403;

}

}

拒绝以wget方式的httpuseragent,增加如下内容 
## Block http user agent - wget ## 
if ($http_user_agent ~* (Wget) ) { 
return 403; 

## Block Software download user agents ## 
if ($http_user_agent ~* LWP::Simple|BBBike|wget) { 
return 403; 
}

方法2

使用robots.txt文件:例如阻止所有的爬虫爬取,但是这种效果不是很明显

User-agent: *
Disallow: /

方法3. 单独分离

进入到nginx安装目录下的conf目录,将如下代码保存为 agent_deny.conf 
cd /usr/local/nginx/conf 
vim agent_deny.conf

#禁止Scrapy等工具的抓取 
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { 
     return 403; 
}

#禁止指定UA及UA为空的访问 
if ($http_user_agent ~ "FeedDemon|JikeSpider|^$" ) { 
     return 403;              
}

#禁止非GET|HEAD|POST方式的抓取 
if ($request_method !~ ^(GET|HEAD|POST)$) { 
    return 403; 

然后,在网站相关配置中的  location / {  之后插入如下代码: 
include agent_deny.conf;

最后建议使用方法一

时间: 2024-08-04 13:00:49

nginx 中禁止爬虫的相关文章

在nginx中,禁止IP访问.只可以使用域名访问.

if ($host ~* "\d+\.\d+\.\d+\.\d+"){ return 400; } 其实说白了, 就是进行host主机头过滤,使用正则来判断下.

Nginx中的安全配置

1.测试环境 操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26 2.Nginx介绍 1.nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端 2.nginx一般是把请求发送给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回被nginx 3.nginx涉及到两个账户,一个是nginx的运行账户,一个是php-fpm的运行账户 两个账户可以是同

在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you do not want to process requests with undefined “Host” header lines, you may define a default server that just drops the requests: server { listen 80 de

nginx中SSI问题的研究

最近感觉挺爽的,这个项目团队没有一个专门做PHP的,我是第一个进来做PHP(当然还有前端)的,哈哈,我会设计修改出适合我们业务的PHP框架,哈哈,感觉会学到很多东西的样子,前几天在组内20几个前辈面前讲php框架,以及跟大牛们探讨适合我们的php框架,感觉表达能力太差了,知道的东西表达不清楚,还要我的导师去帮我表达,这里感谢下我的导师于洪磊(简称磊哥),磊哥简直就是我的偶像,我没见过那么有深度的程序员,技术牛B这是肯定的了,对技术外的了解超出了我的想象,磊哥看的书很多,涉猎很广泛,尤其在历史和文

Nginx中worker_connections的问题

转载自http://hi.baidu.com/u_chen/item/560f1504a0a77367d45a1184 查看日志,有一个[warn]: 3660#0: 20000 worker_connections are more than open file resource limit: 1024 !! 原来安装好nginx之后,默认最大的并发数为1024,如果你的网站访问量过大,已经远远超过1024这个并发数,那你就要修改worker_connecions这个值 ,这个值越大,并发数也

【转】nginx中的ngx_cdecl

http://blog.csdn.net/midion9/article/details/50605337 看nginx的代码时,发现有些函数返回值之后,还有一个ngx_cdecl关键字,如: 1 2 3 4 5 6 7 intngx_cdecl main(intargc, char*const*argv) {     ngx_int_t         i;     ngx_log_t        *log;     ngx_cycle_t      *cycle, init_cycle;

CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Redis下载地址:wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.安装依赖包 yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl

在nginx中使用lua直接访问mysql和memcaced达到数据接口的统一

安装nginx参见<nginx+lua+redis构建高并发应用> 让nginx 中的nginx_lua_module支持mysql 和memcache 下载 https://github.com/agentzh/lua-resty-memcached https://github.com/agentzh/lua-resty-mysql 对于访问接口的统一有很多的处理方式,这里介绍使用nginx lua 访问mysql并用memcache缓存起来. 配置如下: ... location /ge

在Powershell中禁止执行脚本

在Powershell中执行脚本时,有如下报错: 无法加载文件 F:\script\1.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 所在位置 行:1 字符: 8 + .\1.ps1 <<<< + CategoryInfo          : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeExc