> 技术文档 > Nginx 配置管理与 Flask 登录日志查询优化实战指南_flask 日志 最佳实践

Nginx 配置管理与 Flask 登录日志查询优化实战指南_flask 日志 最佳实践


个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

目录

  • Nginx 配置管理与 Flask 登录日志查询优化实战指南
    • 引言
    • 第一部分:Nginx 新增配置生效管理
      • 1. 背景
      • 2. 操作步骤
        • (1) 检查 Nginx 配置目录
        • (2) 检查 Nginx 配置语法
        • (3) 平滑重载 Nginx
        • (4) 验证新配置
        • (5) 避免配置冲突
        • (6) 回滚方案
      • 3. 关键点总结
    • 第二部分:Flask 登录日志查询优化
      • 1. 背景
      • 2. 优化方案
        • (1) 原代码分析
        • (2) 优化后的代码
        • (3) 日志记录优化
      • 3. 关键点总结
    • 第三部分:完整代码示例
      • 1. Nginx 配置示例
      • 2. Flask 登录日志查询完整代码
    • 第四部分:总结与最佳实践
      • 1. Nginx 配置管理最佳实践
      • 2. Flask 查询优化最佳实践
    • 结语

Nginx 配置管理与 Flask 登录日志查询优化实战指南

引言

在 Web 开发和服务器运维中,Nginx 的配置管理和后端 API 的数据查询优化是常见的需求。本文将通过两个典型场景进行详细讲解:

  1. Nginx 新增配置如何生效而不影响现有服务
  2. Flask 后端如何优化登录日志查询,使其按时间倒序排列

文章包含详细的操作步骤、代码示例和优化建议,适合运维工程师和 Python 开发者阅读。


第一部分:Nginx 新增配置生效管理

1. 背景

假设我们有一个 Nginx 服务器,现有配置文件 /etc/nginx/conf.d/doudian.conf,现在需要新增 doudian_v2.conf 但不影响当前服务。

2. 操作步骤

(1) 检查 Nginx 配置目录
cd /etc/nginx/conf.dls -l

输出示例:

-rw-r--r-- 1 root root 1159 May 5 09:07 doudian.conf-rw-r--r-- 1 root root 1162 May 16 00:38 doudian_v2.conf
(2) 检查 Nginx 配置语法
nginx -t

如果输出 syntax is ok,说明配置正确。

(3) 平滑重载 Nginx
nginx -s reload

这样不会中断现有连接,新配置 doudian_v2.conf 会生效。

(4) 验证新配置
nginx -T | grep doudian_v2

如果输出包含 doudian_v2.conf 的内容,说明配置已加载。

(5) 避免配置冲突
  • 监听相同端口和域名:Nginx 会按文件名顺序加载,可能导致冲突。
  • 解决方案:
    • 使用不同的 server_name
    • 或使用不同的端口(如 listen 8080
(6) 回滚方案

如果新配置出现问题:

mv /etc/nginx/conf.d/doudian_v2.conf /etc/nginx/conf.d/doudian_v2.conf.baknginx -s reload

3. 关键点总结

步骤 命令 说明 检查配置 nginx -t 确保语法正确 重载配置 nginx -s reload 不中断服务生效 验证配置 nginx -T 检查是否加载 冲突管理 不同 server_name 或端口 避免新旧配置冲突 回滚 mv + reload 快速恢复

第二部分:Flask 登录日志查询优化

1. 背景

现有 Flask 登录日志查询未排序,需改为按 login_time 倒序排列(最新记录在前)。

2. 优化方案

(1) 原代码分析
@staticmethoddef login_log_list(page=1, page_size=10, username=None): query = db.session.query(LoginLog) if username: query = query.filter(LoginLog.username.like(f\"%{username}%\")) pagination = query.paginate(page=page, per_page=page_size) return { \"data\": [login_log.to_dict() for login_log in pagination.items], \"total\": pagination.total, \"page\": page, \"page_size\": page_size }

问题:未指定排序方式,可能导致数据无序返回。

(2) 优化后的代码
@staticmethoddef login_log_list(page=1, page_size=10, username=None): try: query = db.session.query(LoginLog) if username: query = query.filter(LoginLog.username.like(f\"%{username}%\")) # 按 login_time 降序排列 query = query.order_by(LoginLog.login_time.desc()) pagination = query.paginate( page=page, per_page=page_size, error_out=False ) return { \"data\": [login_log.to_dict() for login_log in pagination.items], \"total\": pagination.total, \"page\": page, \"page_size\": page_size } except Exception as e: logging.error(f\"Error fetching login logs: {e}\") return { \"data\": [], \"total\": 0, \"page\": page, \"page_size\": page_size }

优化点:

  1. 使用 order_by(LoginLog.login_time.desc()) 确保最新记录在前。
  2. 增加异常处理,避免因查询错误导致 API 崩溃。
(3) 日志记录优化
import logginglogging.basicConfig( level=logging.INFO, format=\'%(asctime)s - %(levelname)s - %(message)s\')

避免使用 print(),改用标准日志模块。


3. 关键点总结

优化项 原代码问题 优化方案 排序 未指定顺序 order_by(LoginLog.login_time.desc()) 异常处理 无错误捕获 try-except + logging.error 日志管理 使用 print 改用 logging 模块

第三部分:完整代码示例

1. Nginx 配置示例

/etc/nginx/conf.d/doudian_v2.conf

server { listen 8080; server_name example.com; location / { proxy_pass http://backend_v2; }}

2. Flask 登录日志查询完整代码

from datetime import datetimefrom flask import jsonify, requestfrom extensions.ext_database import dbfrom models.model import LoginLog, Userimport logginglogging.basicConfig(level=logging.INFO)class UserService: @staticmethod def login_log_list(page=1, page_size=10, username=None): \"\"\"分页查询登录日志,按时间倒序排列\"\"\" try: query = db.session.query(LoginLog) if username: query = query.filter(LoginLog.username.like(f\"%{username}%\")) # 关键优化:按 login_time 降序排列 query = query.order_by(LoginLog.login_time.desc()) pagination = query.paginate( page=page, per_page=page_size, error_out=False ) return { \"data\": [login_log.to_dict() for login_log in pagination.items], \"total\": pagination.total, \"page\": page, \"page_size\": page_size } except Exception as e: logging.error(f\"Error fetching login logs: {e}\") return { \"data\": [], \"total\": 0, \"page\": page, \"page_size\": page_size }# Flask API 路由示例@app.route(\"/api/login_logs\", methods=[\"POST\"])def get_login_logs(): data = request.json page = data.get(\"page\", 1) page_size = data.get(\"page_size\", 10) username = data.get(\"username\") result = UserService.login_log_list(page, page_size, username) return jsonify({ \"code\": 200, \"result\": \"success\", \"data\": result[\"data\"], \"page\": page, \"page_size\": page_size, \"total\": result[\"total\"] })

第四部分:总结与最佳实践

1. Nginx 配置管理最佳实践

  • 每次修改配置前先 nginx -t 检查语法。
  • 使用 nginx -s reload 平滑重载,避免服务中断。
  • 新旧配置避免监听相同 server_name 和端口。

2. Flask 查询优化最佳实践

  • 排序:使用 order_by 确保数据有序返回。
  • 分页:使用 paginatelimit/offset 提高性能。
  • 异常处理:避免 API 因数据库错误崩溃。
  • 日志记录:使用 logging 替代 print,方便排查问题。

结语

本文通过 Nginx 配置管理和 Flask 查询优化两个案例,详细讲解了运维和开发中的常见问题及解决方案。希望读者能从中受益,并在实际工作中应用这些优化技巧。

如果你有任何问题或建议,欢迎留言讨论! 🚀