Nginx
使用 NGINX limit_req_zone 僅對首頁進行速率限制
我有一個 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; }