Maison  >  Article  >  Opération et maintenance  >  La mémoire s'envole ! Rappelez-vous une fois que Nginx a intercepté le robot d'exploration

La mémoire s'envole ! Rappelez-vous une fois que Nginx a intercepté le robot d'exploration

藏色散人
藏色散人avant
2023-03-30 16:35:261859parcourir

Cet article vous apporte des connaissances pertinentes sur nginx, qui présente principalement nginx pour intercepter les robots. Les amis intéressés peuvent y jeter un œil ensemble. J'espère que cela sera utile à tout le monde.

Avant-propos :

Récemment, j'ai constaté que la mémoire du serveur montait en flèche pendant une certaine période de temps, j'ai d'abord pensé que cela était dû à des activités normales. J'ai mis à niveau la mémoire du serveur et j'ai découvert que le problème était dû. toujours pas résolu ; (je suis paresseux ici. Je ne l'avais pas au début. Si le problème est détecté, la valeur par défaut est que le volume d'affaires a augmenté)

J'ai immédiatement vérifié le journal nginx et trouvé des demandes inhabituelles :

La mémoire senvole ! Rappelez-vous une fois que Nginx a intercepté le robot dexploration

Qu'est-ce que c'est ? J'ai cherché par curiosité et j'ai trouvé le résultat :

La mémoire senvole ! Rappelez-vous une fois que Nginx a intercepté le robot dexploration

Bon gars, j'ai failli ne pas renvoyer mon serveur chez moi

Résolvez-le vite :

; solution au niveau nginx

J'ai trouvé que même s'il s'agit d'un robot d'exploration, il n'est pas déguisé, et chaque requête contient un agent utilisateur, et ils sont tous pareils, alors c'est facile à résoudre, il suffit d'aller au code : (je appliquez docker ici)

1, docker-compose

version: '3'
services:
  d_nginx:
    container_name: c_nginx
    env_file:
      - ./env_files/nginx-web.env
    image: nginx:1.20.1-alpine
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    links:
      - d_php
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/deny-agent.conf:/etc/nginx/agent-deny.conf
      - ./nginx/certs:/etc/nginx/certs
      - ./nginx/logs:/var/log/nginx/
      - ./www:/var/www/html

2, structure de répertoires

nginx
-----nginx.conf
-----agent-deny.conf
-----conf
----------xxxx01_server.conf
----------xxxx02_server.conf

3, agent-deny.conf

if ($http_user_agent ~* (Scrapy|AhrefsBot)) {
    return 404;
}
if ($http_user_agent ~ "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)|^$" ) {
    return 403;
}

4 Ensuite, incluez l'agent-deny.conf

server {
    include /etc/nginx/agent-deny.conf;
    listen 80;
    server_name localhost;
    client_max_body_size 100M;
    root /var/www/html/xxxxx/public;
    index index.php;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    #客户端允许上传文件大小
    client_max_body_size 300M;

    #客户端缓冲区大小,设置过小,nginx就不会在内存里边处理,将生成临时文件,增加IO
    #默认情况下,该指令,32位系统设置一个8k缓冲区,64位系统设置一个16k缓冲区
    #client_body_buffer_size 5M;
    #发现设置改参数后,服务器内存跳动的幅度比较大,因为你不能控制客户端上传,决定不设置改参数

    #此指令禁用NGINX缓冲区并将请求体存储在临时文件中。 文件包含纯文本数据。 该指令在NGINX配置的http,server和location区块使用
    #可选值有:
    #off:该值将禁用文件写入
    #clean:请求body将被写入文件。 该文件将在处理请求后删除
    #on: 请求正文将被写入文件。 处理请求后,将不会删除该文件
    client_body_in_file_only clean;


    #客户端请求超时时间
    client_body_timeout 600s;

    location /locales {
       break;
    }

    location / {
        #禁止get请求下载.htaccess文件
        if ($request_uri = '/.htaccess') {
            return 404;
        }
        #禁止get请求下载.gitignore文件
        if ($request_uri = '/storage/.gitignore') {
            return 404;
        }
        #禁止get下载web.config文件
        if ($request_uri = '/web.config') {
            return 404;
        }
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /oauth/token {
        #禁止get请求访问 /oauth/token
        if ($request_method = 'GET') {
            return 404;
        }
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /other/de {
        proxy_pass http://127.0.0.1/oauth/;
        rewrite ^/other/de(.*)$ https://www.baidu.com permanent;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass d_php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_connect_timeout 300s;
        fastcgi_send_timeout 300s;
        fastcgi_read_timeout 300s;
        include fastcgi_params;
        #add_header 'Access-Control-Allow-Origin' '*';
        #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        #add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token';
    }
}

dans chaque service afin que le AhrefsBot sera intercepté à chaque requête.

Interception d'Alibaba Cloud Security Group

L'analyse des journaux a également révélé que les adresses IP demandées ne sont en réalité que quelques segments, donc dans un souci de garanties multiples (Alibaba Cloud est le plus rapide et le meilleur, les adresses payantes sont différentes)

Segment IP :

54.36.0.0
51.222.0.0
195.154.0.0

Direction de l'accès direct au réseau externe :

La mémoire senvole ! Rappelez-vous une fois que Nginx a intercepté le robot dexploration

Tutoriel recommandé : Tutoriel nginx

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer