我有一个 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...