Nginx禁止指定UA访问的方法

本文介绍 Nginx 禁止指定 UA 访问的配置。

UA,即 Http User Agent,在 Nginx 中使用内置变量 $http_user_agent 表示,该信息作为 request header 的一部分被发往 webserver。因此,对 webserver 来说,有一种禁止访问的方式,就是对 UA 进行判断。

禁止搜索引擎爬虫

因为你懂的原因,并不是太希望 Baidu 这类爬虫来我的网站,所以在 Nginx 中使用 if 对 UA 进行判断:

if ($http_user_agent ~* "qihoobot|Baidu|Baiduspider|Baiduspider-image|Baiduspider-video|Baiduspider-news|Baiduspider-favo|Baiduspider-cpro|Baiduspider-ads|Baiduboxapp|YisouSpider|EasouSpider|YodaoBot|YoudaoBot|Sosospider|Sogou|^$") {
    return 444;
  }

禁止下载工具

if ($http_user_agent ~* "Scrapy|HttpClient|Curl|Wget|Idm|Aria2|Axel|Thunder|Youtube-dl|Movgrab|rtorrent|ctorrent|Transmission-cli|vuze") {
    return 444;
  }

禁止国产浏览器访问

if ($http_user_agent ~* "360|360SE|360EE|2345Explorer|maxthon|sogou|theworld|qiyu|green|qq|qqbrowser|tt|liebao|lbbrowser|tao|taobao|coolnovo|saayaa|uc|mi|xiaomi|baidu|yandex|micromessenger|wechat|weibo|douban|suning|iqiyi|alipay|ali-ap|ali-ap-pd|ali-am|ali-tb|ali-tb-pd|ali-tm|ali-tm-pd") {
    return 444;
  }

禁止指定系统访问

也有某些国产系统,例如 aliyun os 这样的,我也想禁止它的访问:

if ($http_user_agent ~* "yunos") {
    return 444;
  }

结论

根据以上可以看出,要对 UA 进行判断,规则就是:

if ($http_user_agent ~* "UA关键词") {
    ...
  }

不过这种方法缺点很明显,因为 UA 实在太容易伪造了 ,不过防一下不经伪造的请求(例如国产搜索爬虫)还是可以的。当然也有些更靠谱的方式,例如对 session 的验证。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Nginx禁止指定UA访问的方法

    本文介绍 Nginx 禁止指定 UA 访问的配置. UA,即 Http User Agent,在 Nginx 中使用内置变量 $http_user_agent 表示,该信息作为 request header 的一部分被发往 webserver.因此,对 webserver 来说,有一种禁止访问的方式,就是对 UA 进行判断. 禁止搜索引擎爬虫 因为你懂的原因,并不是太希望 Baidu 这类爬虫来我的网站,所以在 Nginx 中使用 if 对 UA 进行判断: if ($http_user_age

  • 基于Nginx禁止指定IP、国外IP访问我的网站

    目录 用Nginx禁止指定IP.国外IP访问我的网站 ①安装 geoip2 扩展依赖: ②下载 ngx_http_geoip2_module 模块: ③解压模块到指定路径 ④安装 nginx 模块 ⑤下载最新的 IP 地址数据库文件 ⑥配置 nginx 配置文件 ⑦模拟测试验证 总结 用Nginx禁止指定IP.国外IP访问我的网站 想要实现这个功能有很多方法,下面我就来介绍基于 Nginx 的 ngx_http_geoip2 模块来禁止国外 IP 访问网站. ①安装 geoip2 扩展依赖: [

  • nginx强制使用https访问的方法(http跳转到https)

    需求简介 基于nginx搭建了一个https访问的虚拟主机,监听的域名是test.com,但是很多用户不清楚https和http的区别,会很容易敲成http://test.com,这时会报出404错误,所以我需要做基于test.com域名的http向https的强制跳转 我总结了三种方式,跟大家共享一下 nginx的rewrite方法 思路 这应该是大家最容易想到的方法,将所有的http请求通过rewrite重写到https上即可 配置 server { listen 111:80; serve

  • Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

  • nginx禁止某个IP访问站点的设置方法

    首先建立下面的配置文件放在nginx的conf目录下面,命名为blocksip.conf: deny 95.105.25.181; 保存一下. 在nginx的配置文件nginx.conf中加入:include blocksip.conf; 重启一下nginx的服务:/usr/local/nginx/sbin/nginx -s reload 就可以生效了. blocksip.conf:的格式还有许多种,可以配置只允许的IP访问或者IP段访问: deny IP; allow IP; # block

  • 利用.Htaccess阻止IP恶意攻击网站,禁止指定域名访问,禁止机器爬虫,禁止盗链

    前几天发现我的网站被一些IP发起了大量恶意的.有针对性的扫描,企图通过暴力探测方式获取网站中一些内部配置文件和信息.我是用.Htaccess来化解攻击的,就是在.Htaccess文件里添加了下面这段配置: order allow,deny deny from 180.97.106. allow from all .Htaccess对与一个网站来说是一种功能非常强大的配置文件.对它的功能了解的越多,你就越容易掌控你的网站配置.利用.Htaccess来禁止某个IP对网站的访问是它是基本功能之一.上面

  • 易语言调用ESPI11.dll实现禁止指定程序访问网络的代码

    拦截指定程序联网的代码 .版本 2 .支持库 eNetIntercept .支持库 eAPI .程序集 拦截指定进程联网 .程序集变量 被拦截进程名, 文本型 .子程序 __启动窗口_创建完毕 .局部变量 a, 网络服务安装 .局部变量 b, 系统信息 被拦截进程名 = "被拦截.EXE" ' 要拦截的程序 .如果真 (a.是否已安装 () = 假) 取系统信息 (b) 写到文件 (b.系统目录 + "\ESPI11.dll", #服务文件) a.安装 (b.系统目

  • Nginx服务器设置网站验证访问的方法

    为网站目录设置访问验证之后我们就是进入此页面都需要输入验证密码才可以,下面我来介绍nginx中配置目录访问验证码方法总结. 1.创建类htpasswd文件 执行: wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 按提示输入用户名.密码.及认证文件名.脚本会自动生成认证文件.记录下脚本返回的文件路径.如:/usr/local/nginx/conf/vpser.net.auth. 2.为Nginx添加auth认证配置 下面是以

  • Nginx中禁止使用IP访问网站的配置实例

    国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 如下的配置项,可以设置允许使用I

  • 教你如何解决Nginx禁止ip加端口访问的问题

    Nginx禁止IP加端口访问 使用iptables 限制对应端口,再利用Nginx将80端口转发到对应端口 CentOS7默认的防火墙是 firewalle,先看看服务器中有没有安装 iptables [root@VM-0-3-centos ~]# service iptables statusRedirecting to /bin/systemctl status iptables.serviceUnit iptables.service could not be found. 安装 ipta

随机推荐