Nginx

使用 NGINX limit_req_zone 僅對首頁進行速率限制

  • January 31, 2022

我有一個 Wordpress 多站點安裝,並且我有一些機器人正在敲擊首頁。我想僅在網站的首頁上設置速率限制,但其他頁面不受限制。

我的麻煩是製作一個與首頁的“空白”地址匹配的 NGINX 位置 /index.php 我可以通過匹配“/”來限制整個站點,但這不是我需要的。

我嘗試使用“索引”作為定義的位置,但這不起作用。有沒有我錯過的技巧?這是一個很難搜尋的案例,因為大多數選擇性限制問題來自做相反的人,人們限制具有更具體地址的資源,例如登錄腳本。

這是我嘗試過的:

limit_req_zone $binary_remote_addr zone=mainlimit:10m rate=1r/m;

server {

   # SSL configuration

   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   include snippets/ssl-example.com.conf;
   include snippets/ssl-params.conf;
   server_name example.com www.example.com;
   client_max_body_size 120M;

   root /usr/share/nginx/example;
   index index.php index.html index.htm;

   rewrite /wp-admin$ $scheme://$host$uri/ permanent;

   #subdomain multi site with wp in 'wp' subdir
   if (!-e $request_filename) {
   # Redirect wp-* files/folders
   rewrite ^(/[^/]+)?(/wp-.*) /wp/$2 last;

   # Redirect other php files
   rewrite ^(/[^/]+)?(/.*\.php) /wp/$2 last;
   }

   location index { #THIS DOES NOT MATCH THE HOME PAGE
       limit_req zone=mainlimit burst=3 nodelay;
       try_files $uri $uri/ /index.php?$args ;
   }

   location / {
       #limit_req zone=mainlimit burst=3 nodelay; THIS MATCHES EVERYTHING
       try_files $uri $uri/ /index.php?$args ;
   }
   location ~* /wp-content/uploads/.*\.php$ {
   return 503;
   }

   location ~* /data/.*\.php$ {
   return 503;
   }
***MORE STUFF...

使用完全匹配location

location = / {
   limit_req zone=mainlimit burst=3 nodelay;
   try_files $uri $uri/ /index.php?$args;
}

location / {
   try_files $uri $uri/ /index.php?$args;
}

引用自:https://serverfault.com/questions/1091683