Nginx拒绝GET方法

时间:2019-07-20 05:38:51

标签: wordpress nginx

有大量的bot请求通过URL wp-login.php?action=register到我的WP网站,以创建垃圾用户。我想使用Nginx阻止所有这些人

我已尝试根据此帖子https://stackoverflow.com/a/48614915/6563638

在conf以下应用
location = /wp-login.php {
       if ( $args ~ ^action=register ) {
               return 403;
       }
}

location / {
        try_files $uri $uri/ /index.php?$args;
}

wp-login.php?action=register的所有请求都已成功返回403。但是,对wp-login.php的其他请求现在完全是文件下载请求。我不能将它们传递给PHP CGI来执行。

有人知道这个问题的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我从这里https://gist.github.com/jrom/1760790找到了一个干净清晰的解决方案。尽管遵循该帖子中使用map的评论会简短而优雅,但我发现尝试使用if语句更容易理解“如果是邪恶的”。

这是我的WP网站的conf

server {
    listen   80;
    server_name  ....;
    root   ...;
    index index.php;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    if ( $request_filename = "${document_root}/wp-login.php" ) {
        set $login "1";
    }

    if ( $arg_action = "register") {
        set $login "${login}2";
    }

    if ( $login = "12" ){
        return 403;
    }

    location /portal/ {
                try_files $uri $uri/ /portal/index.php?$args;
        }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_buffer_size 256k;
                fastcgi_buffers 4 256k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

答案 1 :(得分:0)

1。。为什么不只是禁用新用户注册?您可以在WordPress信息中心>设置中找到最简单的方法。即使您更改服务器,该设置也将保留。想象一下您将来会改用Apache。

2。。您的Nginx规则似乎很糟糕,但是有两个问题:

  • location文件的.php块在哪里传递给PHP FastCGI?是否仅发生wp-login.php或所有其他.php文件?
  • 仅匹配以action=register开头的参数。我可以将请求更改为?s=1&action=register并完成。 (s对WordPress无效,只能绕过您的规则。)

3。。请勿编辑任何WordPress核心文件链接@ num8er的建议。您的更改将确定会通过WordPress更新恢复。但是您也应该按照以下规则阻止它们:

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}