我的一个网站不断收到包含查询字符串的虚假 URL 请求的垃圾邮件。
我已设置缓存,但不幸的是查询字符串被忽略了。现在每次我收到大量查询字符串请求时,我的服务器都会因为大量访问数据库和 PHP 处理(我使用的是 wordpress)而陷入瘫痪,我的服务器变得没有响应。
我如何忽略/重写包含将传递到我的后端的任何 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 ;
}
有没有一种简单的方法可以通过重写来实现这一点?我很震惊,我在互联网上几乎找不到关于这个问题的任何其他信息(也许我没有寻找正确的解决方案),我肯定不是唯一一个面临这个问题的人。
大家都是如何处理这个问题的?
答案1
这似乎已经奏效了......
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;
}
}