JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

「每天一道面试题」Nginx限制

wys521 2024-09-12 23:12:15 精选教程 26 ℃ 0 评论

Nginx限制

Nginx限制爬虫

修改 nginx.conf,禁止网络爬虫的 ua,返回 403,具体配置如下:

server{

    listen 80;
    server_name 127.0.0.1; 

    # 添加如下内容即可防止爬虫
    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 
    {
        return 403;
    }
}

Nginx限制浏览器访问

限制浏览器访问:

if ($http_user_agent ~* "Firefox|MSIE")
{
     return 403;
}

Nginx限制IP访问

有时候我们需要针对屏蔽某些恶意的 IP 访问我们的网站,或者限制仅仅某些白名单 IP 才能访问我们的网站。这时候我们就可以在 Nginx 中通过简单的配置来达到目的。

Nginx限制IP访问配置

屏蔽单个ip访问

# 格式: deny ip;
deny 123.68.23.5;

允许单个ip访问

# 格式: allow ip;
allow 123.68.25.6;

屏蔽所有ip访问

deny all;

允许所有ip访问

allow all;

屏蔽ip段访问

# deny ip/mask
# 屏蔽172.12.62.0到172.45.62.255访问的命令 
deny 172.12.62.0/24;

允许ip段访问

# allow ip/mask
# 屏蔽172.102.0.0到172.102.255.255访问的命令 
allow 172.102.0.0/16;

配置说明

  1. 可新建一个配置文件,如 blockip.conf。在其中编写相关的 ip 限制语句,然后在 nginx.conf 中加入如下配置:# 配置ip限制策略
    include blockip.conf;
  1. nginx 会根据配置文件中的语句,从上至下依次判断。因此,写在前面的语句可能会屏蔽后续的语句。除部分 ip 白名单外,屏蔽所有 ip 的错误示例:deny all; # 该语句已经禁止所有ip的访问,后续的配置不会生效
    allow 123.45.25.6;
    allow 123.68.52.125;
    allow 123.125.25.106;正确示例:# 允许部分ip访问
    allow 123.45.25.6;
    allow 123.68.52.125;
    allow 123.125.25.106;
    # 禁止其余ip访问
    deny all;
  2. 屏蔽策略文件可以放在 http, server, location, limit_except 语句块中,我们可以根据需要合理的配置。

放置位置

效果

http

nginx 中所有服务起效

server

指定的服务起效

location

满足的 location 下起效

limit_except

指定的 http 方法谓词起效

Nginx限制IP访问频率

限制所有单个ip的访问频率

http中的配置

http {
    #$limit_conn_zone:限制并发连接数
    limit_conn_zone $binary_remote_addr zone=one1:10m;

    #limit_req_zone:请求频率
    #$binary_remote_addr:以客户端IP进行限制
    #zone=one:10m:创建IP存储区大小为10M,用来存储访问频率
    #rate=10r/s:表示客户端的访问评率为每秒10次
    limit_req_zone $binary_remote_addr zone=one2:10m   rate=10r/s;  
}

server配置

server {
        listen       80;
        server_name  localhost;

        location / {
            #限制并发数2
            limit_conn  one1  2;  
            #burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟
            #nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503
            limit_req   zone=one2 burst=10 nodelay;
            root   html;
            index  index.html index.htm;
        }
}

访问白名单的配置

http中的配置

http {
# geo:指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0
    geo $limited{
        default 1;
        10.0.0.140 0;  #把10.0.0.140设置为白名单
        10.0.0.141 0;  #白名单ip,可继续添加
    }
    #使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真是的ip
    #这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问

    map $limited $limit {    
        1 $binary_remote_addr;   
        0 "";    
    }  
    limit_conn_zone $limit zone=one:20m;
    limit_req_zone $limit zone=one2:20m   rate=10r/s; 
}

server配置

server {
        listen       80;
        server_name  localhost;

        location / {
            limit_conn  one  2;   
            limit_req   zone=one2 burst=10 nodelay; 
            root   html;
            index  index.html index.htm;
        }
}

本文参考:嗨客网(www.haicoder.net)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表