我想问你是否知道apache或nginx中的任何方法来限制对wp-login的访问,而不是整个服务器的访问。我的意思是:
例如,有一个带有Apache / Nginx的服务器,wp-login.php /xmrlpc.php或admin-ajax.php有很多命中。如果我不拒绝通过.htaccess文件访问整个服务器,那么服务器的负载会变得非常高。是否有任何配置或软件(不是wp插件)可能对我的情况有帮助?例如,如果相同的IP击中wp-login.php超过X(数量)次,它是否可以限制访问?
提前谢谢!
答案 0 :(得分:1)
以下是我博客中有关如何在Nginx中为wp-login.php配置速率限制的摘录。
Nginx有一些关于如何实现速率限制的优秀文档,但我将提供一个如何为WordPress优化它的示例。在Nginx中设置速率限制很简单,只需要两个组件:
nginx.conf
文件中定义一个区域。limit_req_zone
和limit_req_status
。这些指令位于主http
配置文件的nginx.conf
块内。代码:
http {
limit_req_zone $binary_remote_addr zone=wordpress:10m rate=15r/m;
limit_req_status 429;
}
上面的代码段定义了一个名为“wordpress”的10 MB区域,它允许每分钟最多15个请求来自任何一个IP地址。 limit_req_zone
需要变量或键。在这种情况下,密钥是$binary_remote_addr
,或客户端的IP地址。 Nginx将使用最多10 MB的内存来存储密钥,如果密钥超过允许的最大请求数,Nginx将终止连接并返回limit_req_status
中定义的状态代码。默认代码为503 Service Unavailable
,但我更喜欢更具体的429 Too Many Requests
响应。请记住,如果您未使用error_page
指令设置自定义错误页面,Nginx将向客户端显示非标准HTTP代码的空白页。
您可以根据需要为区域命名(在上面的示例中命名为“wordpress”),您还可以定义您认为合适的任何速率限制。我发现每分钟最多允许15个请求的限制足以严重阻碍蛮力攻击,但足够宽容,不会干扰合法错误输入密码的最终用户。
要实际使用区域,我们必须通过将此代码添加到WordPress登录位置块来实现它:
location = /wp-login.php {
limit_req zone=wordpress;
# add your PHP fastcgi config here
}
这告诉Nginx使用我们在上面定义的区域中指定的参数来限制对/wp-login.php
页面的请求。确保将“wordpress”替换为您在上一步中为区域命名的内容。重新启动或重新加载Nginx并快速刷新登录页面以测试新的强力保护是否正常。如果刷新速度快于limit_req_zone
中定义的速率,则服务器将返回limit_req_status
中定义的状态代码。
强制性说明:如果您已阅读有关如何使用Nginx设置速率限制的其他指南,您可能已经看到了其他语法,例如limit_req zone=one burst=1 nodelay
。 burst
和nodelay
选项更复杂,可让您控制超额请求的发生情况。在这种情况下,它们不是必需的,因为我们希望立即拒绝任何过多的暴力尝试,但我强烈建议您在这里阅读它们的文档。
来源:https://blog.arnonerba.com/2016/07/server-logs-explained-part-3