You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Flask完全拦截含wp-路径的机器人GET请求

拦截含"wp-"的恶意请求优化方案

你的现有方案是在Flask应用内部通过before_request处理请求,但此时请求已经被PythonAnywhere的Web服务器接收并转发到Flask了,所以访问日志里仍会记录请求,且消耗了部分服务器资源来完成转发。要彻底拦截这类请求,需要在更上层的Web服务器(nginx)层面处理,直接拒绝请求,不让它们到达Flask应用。

最有效的方案:PythonAnywhere nginx层面拦截

  1. 登录PythonAnywhere,进入对应网站的「Web」标签页
  2. 滚动到「Advanced」区域,点击「Edit nginx configuration」
  3. 在server代码块的最顶部(所有location规则之前)添加以下规则:
if ($request_uri ~* "wp-") {
    return 444;
}

return 444是nginx的特殊状态码,会直接关闭连接,不返回任何响应,能最大程度节省服务器资源,且这类请求不会被转发到Flask应用。
4. 保存配置后,点击页面顶部的「Reload web app」使规则生效。

备选方案:WSGI层面提前拦截

如果暂时无法修改nginx配置,可以在WSGI入口文件(通常是wsgi.py)中添加更靠前的拦截逻辑,比Flask的before_request更早处理请求:

from your_app import app as application

class BlockWPRequests:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        path = environ.get('PATH_INFO', '')
        if 'wp-' in path:
            # 直接返回444,不触发Flask应用逻辑
            start_response('444 No Response', [('Content-Type', 'text/plain')])
            return []
        return self.app(environ, start_response)

# 包装原Flask应用
application = BlockWPRequests(application)

修改后重新加载Web应用即可,这种方式能避免请求进入Flask的路由处理流程,但仍会被Web服务器接收并转发到WSGI层。

内容的提问来源于stack exchange,提问作者5idneyD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:50:25