我安装了 Wordpress 多站点,并且有一些机器人在敲打主页。我想只对站点的主页设置速率限制,而对其他页面不设限制。
我的麻烦是制作一个与主页的“空白”地址 /index.php 相匹配的 NGINX 位置,我可以通过匹配“/”来限制整个站点,但这不是我需要的。
我尝试使用“索引”作为定义位置,但不起作用。我是不是错过了什么窍门?这是一个很难寻找的案例,因为大多数选择性限制问题都来自做相反事情的人,他们使用更具体的地址(例如登录脚本)来限制资源。
以下是我尝试过的:
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...
答案1
使用精确匹配location
:
location = / {
limit_req zone=mainlimit burst=3 nodelay;
try_files $uri $uri/ /index.php?$args;
}
location / {
try_files $uri $uri/ /index.php?$args;
}