当前位置: 首页 > news >正文

做app推广上哪些网站网页制作心得2000字

做app推广上哪些网站,网页制作心得2000字,罗湖专业做网站公司,更换网站logo在现代 Web 应用中,针对敏感接口(如短信验证码、登录接口等)的访问次数限制至关重要。通过设置合理的限流策略,可以有效防止接口滥用,避免过多的资源消耗,并提升安全性。本文将通过 Nginx 和 Flask-Limiter…

在现代 Web 应用中,针对敏感接口(如短信验证码、登录接口等)的访问次数限制至关重要。通过设置合理的限流策略,可以有效防止接口滥用,避免过多的资源消耗,并提升安全性。本文将通过 Nginx 和 Flask-Limiter 为 Flask 应用实现 IP 级别的限流,同时确保限流基于客户端的真实 IP 地址,而非内网地址如 172.17.0.1

1. 使用 Nginx 作为反向代理

Nginx 通常作为 Web 应用的反向代理,接收来自客户端的请求并将其转发到后端的应用程序(如 Flask)。由于 Nginx 在中间充当代理角色,后端应用获取到的可能是 Nginx 或 Docker 容器的内网 IP(如 172.17.0.1),因此获取客户端真实 IP 就显得非常重要。

Nginx 配置中的关键参数

我们可以通过一些配置,将客户端的真实 IP 地址传递给 Flask 应用:

# 重定向 HTTP 到 HTTPS
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}# 处理 HTTPS 请求
server {listen 443 ssl http2;server_name example.com;# SSL 证书配置ssl_certificate    /path/to/your/fullchain.pem;ssl_certificate_key    /path/to/your/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:!aNULL:!MD5:!DSS;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;add_header Strict-Transport-Security "max-age=31536000" always;# 反向代理到 Flask 应用的 5100 端口location / {proxy_pass http://127.0.0.1:5100;  # 将请求转发到 Flaskproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# 日志配置(可选)access_log  /path/to/log/access.log;error_log  /path/to/log/error.log;
}
主要参数解释
  • proxy_pass: 将请求转发到后端的 Flask 应用,通常监听在 127.0.0.1:5100 端口。
  • proxy_set_header Host $host: 将客户端请求的主机名传递给后端应用。
  • proxy_set_header X-Real-IP $remote_addr: 传递客户端的真实 IP 地址给后端应用。$remote_addr 是直接连接到 Nginx 的客户端 IP,通常是原始客户端的 IP。
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for: 将经过的代理链(包括客户端真实 IP)传递给后端应用。这个头通常包含客户端的真实 IP 地址。
  • proxy_set_header X-Forwarded-Proto $scheme: 传递请求使用的协议(HTTP 或 HTTPS)给后端应用。
避免内网 IP 地址 172.17.0.1

如果您的 Flask 应用运行在 Docker 容器中,而 Nginx 也运行在同一服务器上,后端 Flask 应用接收到的 IP 可能是 172.17.0.1,这是 Docker 内网的默认网关地址。这个地址会导致所有请求都被认为来自同一个 IP,从而错误地进行限流。

通过上述 Nginx 配置中的 X-Forwarded-For 头部,我们可以将客户端的真实 IP 地址传递给 Flask,避免使用 Docker 内部的 IP(如 172.17.0.1)进行限流。

2. 使用 Flask-Limiter 实现限流

Flask-Limiter 是一个非常方便的库,用于限制 Web 应用中的接口访问次数。我们可以结合 Nginx 的配置,通过 X-Forwarded-For 获取到真实的客户端 IP,基于 IP 实现限流。

安装 Flask-Limiter

首先,确保 Flask-Limiter 已安装:

pip install flask-limiter

 基于 IP 地址限流的 Flask 代码

from flask import Flask, request, jsonify
from flask_limiter import Limiterapp = Flask(__name__)# 获取真实客户端 IP 地址
def get_client_ip():# 检查是否有 X-Forwarded-For 头部if request.headers.getlist("X-Forwarded-For"):return request.headers.getlist("X-Forwarded-For")[0]  # 获取真实的客户端 IPelse:return request.remote_addr  # 使用默认的 remote_addr# 初始化 Flask-Limiter,并使用 get_client_ip 作为限流的 key_func
limiter = Limiter(key_func=get_client_ip,  # 使用真实的客户端 IP 进行限流app=app,storage_uri="redis://<your_redis_host>:<redis_port>/1"  # 使用 Redis 存储限流信息
)# 定义接口,并为每个 IP 地址限制每分钟 1 次,每天最多 15 次访问
@app.route('/send_verification_code', methods=['POST'])
@limiter.limit("1 per minute; 15 per day")
def send_verification_code():phone_number = request.form.get('phone_number')machine_id = request.headers.get('Machine-Id')if not phone_number:return jsonify({"error": "手机号不能为空"}), 400if not machine_id:return jsonify({"error": "Machine-Id 不能为空"}), 400# 处理发送验证码的逻辑return jsonify({"message": "验证码发送成功"}), 200if __name__ == '__main__':app.run(debug=True)
代码解释
  1. get_client_ip 函数: 用于获取真实的客户端 IP,优先使用 X-Forwarded-For 头部中的第一个 IP 地址(通常为客户端 IP),如果没有,则使用 request.remote_addr

  2. Flask-Limiter 配置: key_func 设置为 get_client_ip,确保限流基于客户端的真实 IP。storage_uri 指定 Redis 存储限流信息,避免 Flask 重启或进程切换时丢失限流数据。

  3. @limiter.limit("1 per minute; 15 per day"): 设置限流规则,限制每个 IP 每分钟只能请求一次,每天最多 15 次。

3. Redis 存储限流信息

Flask-Limiter 支持使用 Redis 存储限流信息,这样即使 Flask 应用重启,限流信息也不会丢失。通过 Redis 可以实现跨进程的限流。

Redis 连接配置
limiter = Limiter(key_func=get_client_ip,app=app,storage_uri="redis://:password@redis_host:6379/1"  # 使用 Redis db1
)

4. 验证限流

通过上述配置,当 Flask-Limiter 生效时,Redis 中的键将会包含真实的客户端 IP,并记录请求的访问次数。例如,Redis 中的键可能类似于:

LIMITS:LIMITER/<client_real_ip>/send_verification_code/1/1/minute

这样,限流规则是基于客户端真实 IP 地址的,避免了因 Docker 内网 IP 172.17.0.1 导致的限流错误。

5. 总结

通过 Nginx 的反向代理配置,我们可以将客户端的真实 IP 传递给 Flask 应用。结合 Flask-Limiter,可以基于客户端的真实 IP 地址,实现针对敏感接口的访问频率限制。这样不仅可以提升 Web 应用的安全性,还能有效防止滥用行为。

核心步骤总结如下:

  • Nginx 配置: 使用 X-Forwarded-ForX-Real-IP 头部传递客户端 IP,避免使用 172.17.0.1 等内网 IP。
  • Flask-Limiter: 结合 Redis 实现基于 IP 地址的访问次数限制。
  • 客户端真实 IP 获取: 通过 get_client_ip 函数确保 Flask 获取到真实的客户端 IP。

这种限流机制为 Web 应用的安全和性能提供了重要保障。

http://www.yayakq.cn/news/128911/

相关文章:

  • 郑州东区做网站电话平板室内装修设计软件
  • 机电工程东莞网站建设技术支持做电路方案设计的网站
  • 小榄做网站龙岩网站设计理念
  • 做一个购物网站广州网站搭建哪家好
  • 网站建设方案网站安全网站建设企业宣传
  • 网站规划与建设心得网站架设标准
  • 自助网站建设工具手机网站开发 .net
  • 成都双流兴城建设投资有限公司网站wordpress 执行流程
  • 口碑好网站建设公司wordpress博客做seo
  • 北京网站制作公司飞沐徐州英才网最新招聘信息
  • 国内网站速度慢cpu占用超出网站空间的分配值
  • 专业系统网站好查看网站被百度收录
  • 网站的规划建设如何布局o2o网站建设公司
  • 免费网站空间怎么做室内装修培训
  • 深圳福田网站建设做的王者荣耀钓鱼网站
  • dede网站怎么做单页面如何看一个网站的备案在哪里做的
  • 无锡网站建设推荐智勇仿站酷网站模板
  • 网站开发人员职位描述哪个专业学习网站建设
  • 分类目录网站程序网络广告创意
  • 永兴县网站建设服务商虚拟主机购买网站
  • 溧阳做网站哪家好专门做ppt会员网站
  • 苏州吴中区做网站价格做网站的广告图片
  • 域名与网站的区别设计类招聘网站
  • 南通网站开发工作纪律和生活纪律研讨发言材料
  • 做swf网站营销软文范例大全
  • 网站后台 请示天津市建设工程交易信息网
  • 企业策划营销中心网站网页优化
  • 百度推广还要求做网站企业文化墙设计网站推荐
  • 东台市住房和城乡建设局闷网站海东营销网站建设服务
  • 新都网站开发wordpress的插件