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

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

我的一个网站不断收到包含查询字符串的虚假 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;

    }

}

相关内容