仅在需要PHP的请求中删除查询string(忽略静态文件和某些URL)

我的一个网站不断收到包含查询string的假URL请求。

我有caching,但不幸的是查询string被忽略。 现在每当我收到大量的查询string请求时,我的服务器就会因为命中数据库和PHP处理(我正在使用wordpress)而被钉死,而且我的服务器变得无响应。

我怎么能忽略/重写请求包含查询string的任何url将通过我的后端,但允许他们的静态文件和某些URL(/search/,/ wp-admin /,wp-login.php等)?

我的nginx设置

location ~ \.php$ { fastcgi_index index.php; try_files $uri = 404; include fastcgi_params; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; } # Use cached or actual file if they exists, otherwise pass request to WordPress location / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args ; } 

有没有一个简单的(ISH)的方式来完成这与重写? 我感到震惊的是,在互联网上我几乎找不到任何其他的信息(也许我没有find正确的解决scheme),我当然不能成为唯一面临这个问题的人。

每个人如何处理?

这似乎已经做了诀窍…

 http { limit_conn_zone $binary_remote_addr zone=default_con:20m; limit_req_zone $binary_remote_addr zone=php:1m rate=2r/s; location ~ \.php { ## LIMIT REQUESTS TO STOP SERVER GETTING NAILED ## limit_req zone=php burst=7 nodelay; limit_conn default_con 2; fastcgi_index index.php; try_files $uri = 404; include fastcgi_params; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; } }