欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx配置管理與Flask登錄日志查詢優(yōu)化實戰(zhàn)指南

 更新時間:2025年05月16日 11:06:32   作者:碼農(nóng)阿豪@新空間  
在 Web 開發(fā)和服務(wù)器運維中,Nginx 的配置管理和后端 API 的數(shù)據(jù)查詢優(yōu)化是常見的需求,本文將通過兩個典型場景進(jìn)行詳細(xì)講解文章包含詳細(xì)的操作步驟、代碼示例和優(yōu)化建議,需要的朋友可以參考下

引言

在 Web 開發(fā)和服務(wù)器運維中,Nginx 的配置管理和后端 API 的數(shù)據(jù)查詢優(yōu)化是常見的需求。本文將通過兩個典型場景進(jìn)行詳細(xì)講解:

  1. Nginx 新增配置如何生效而不影響現(xiàn)有服務(wù)
  2. Flask 后端如何優(yōu)化登錄日志查詢,使其按時間倒序排列

文章包含詳細(xì)的操作步驟、代碼示例和優(yōu)化建議,適合運維工程師和 Python 開發(fā)者閱讀。

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

1. 背景

假設(shè)我們有一個 Nginx 服務(wù)器,現(xiàn)有配置文件 /etc/nginx/conf.d/doudian.conf,現(xiàn)在需要新增 doudian_v2.conf 但不影響當(dāng)前服務(wù)。

2. 操作步驟

(1) 檢查 Nginx 配置目錄

cd /etc/nginx/conf.d
ls -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

這樣不會中斷現(xiàn)有連接,新配置 doudian_v2.conf 會生效。

(4) 驗證新配置

nginx -T | grep doudian_v2

如果輸出包含 doudian_v2.conf 的內(nèi)容,說明配置已加載。

(5) 避免配置沖突

  • 監(jiān)聽相同端口和域名:Nginx 會按文件名順序加載,可能導(dǎo)致沖突。
  • 解決方案:
    • 使用不同的 server_name
    • 或使用不同的端口(如 listen 8080

(6) 回滾方案

如果新配置出現(xiàn)問題:

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

3. 關(guān)鍵點總結(jié)

步驟命令說明
檢查配置nginx -t確保語法正確
重載配置nginx -s reload不中斷服務(wù)生效
驗證配置nginx -T檢查是否加載
沖突管理不同 server_name 或端口避免新舊配置沖突
回滾mv + reload快速恢復(fù)

第二部分:Flask 登錄日志查詢優(yōu)化

1. 背景

現(xiàn)有 Flask 登錄日志查詢未排序,需改為按 login_time 倒序排列(最新記錄在前)。

2. 優(yōu)化方案

(1) 原代碼分析

@staticmethod
def 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
    }

問題:未指定排序方式,可能導(dǎo)致數(shù)據(jù)無序返回。

(2) 優(yōu)化后的代碼

@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
        }

優(yōu)化點:

  • 使用 order_by(LoginLog.login_time.desc()) 確保最新記錄在前。
  • 增加異常處理,避免因查詢錯誤導(dǎo)致 API 崩潰。

(3) 日志記錄優(yōu)化

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

避免使用 print(),改用標(biāo)準(zhǔn)日志模塊。

3. 關(guān)鍵點總結(jié)

優(yōu)化項原代碼問題優(yōu)化方案
排序未指定順序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 datetime
from flask import jsonify, request
from extensions.ext_database import db
from models.model import LoginLog, User
import logging

logging.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}%"))

            # 關(guān)鍵優(yōu)化:按 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"]
    })

第四部分:總結(jié)與最佳實踐

1. Nginx 配置管理最佳實踐

  • 每次修改配置前先 nginx -t 檢查語法。
  • 使用 nginx -s reload 平滑重載,避免服務(wù)中斷。
  • 新舊配置避免監(jiān)聽相同 server_name 和端口。

2. Flask 查詢優(yōu)化最佳實踐

  • 排序:使用 order_by 確保數(shù)據(jù)有序返回。
  • 分頁:使用 paginate 或 limit/offset 提高性能。
  • 異常處理:避免 API 因數(shù)據(jù)庫錯誤崩潰。
  • 日志記錄:使用 logging 替代 print,方便排查問題。

結(jié)語

本文通過 Nginx 配置管理和 Flask 查詢優(yōu)化兩個案例,詳細(xì)講解了運維和開發(fā)中的常見問題及解決方案。希望讀者能從中受益,并在實際工作中應(yīng)用這些優(yōu)化技巧。

以上就是Nginx配置管理與Flask登錄日志查詢優(yōu)化實戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Nginx配置管理與Flask日志查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nginx中配置pathinfo模式示例

    nginx中配置pathinfo模式示例

    這篇文章主要介紹了nginx中配置pathinfo模式示例,本文詳細(xì)記錄了摸索過程和成功的配置案例,需要的朋友可以參考下
    2014-08-08
  • 使用Nginx反向代理到go-fastdfs的方法示例

    使用Nginx反向代理到go-fastdfs的方法示例

    這篇文章主要介紹了使用Nginx反向代理到go-fastdfs的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Nginx服務(wù)器上搭建圖片緩存服務(wù)的基本配置解析

    Nginx服務(wù)器上搭建圖片緩存服務(wù)的基本配置解析

    這篇文章主要介紹了Nginx服務(wù)器上搭建圖片緩存服務(wù)的基本配置解析,分別介紹了通過proxy_store模塊和proxy_cache模塊兩種方式的配置,需要的朋友可以參考下
    2016-04-04
  • Nginx反向代理實現(xiàn)Vue跨域的示例

    Nginx反向代理實現(xiàn)Vue跨域的示例

    本文主要介紹了Nginx反向代理實現(xiàn)Vue跨域的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 關(guān)于nginx proxy_set部分常見配置

    關(guān)于nginx proxy_set部分常見配置

    這篇文章主要介紹了關(guān)于nginx proxy_set部分常見配置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 歐拉部署nginx的實現(xiàn)步驟

    歐拉部署nginx的實現(xiàn)步驟

    本文主要介紹了歐拉部署nginx的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • nginx 配置location匹配規(guī)則實例講解

    nginx 配置location匹配規(guī)則實例講解

    在本篇文章里小編給大家整理的是關(guān)于nginx 配置location匹配規(guī)則實例講解內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2020-03-03
  • Nginx代理中使用斜杠的區(qū)別小結(jié)

    Nginx代理中使用斜杠的區(qū)別小結(jié)

    在使用nginx代理的過程中,斜線是一個非常重要的符號,因為它涉及到了請求路徑的匹配問題,本文主要介紹了Nginx代理中使用斜杠的區(qū)別小結(jié),感興趣的可以了解一下
    2023-09-09
  • Nginx 如何限制訪問頻率,下載速率和并發(fā)連接數(shù)的方法

    Nginx 如何限制訪問頻率,下載速率和并發(fā)連接數(shù)的方法

    這篇文章主要介紹了Nginx 如何限制訪問頻率,下載速率和并發(fā)連接數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Nginx負(fù)載均衡中的Memcached緩存模塊

    Nginx負(fù)載均衡中的Memcached緩存模塊

    Nginx?的?ngx_http_memcached_module?模塊本身并沒有提供緩存功能,它只是一個將用戶請求轉(zhuǎn)發(fā)到?Memcached?服務(wù)器的代理模塊,這篇文章主要介紹了Nginx負(fù)載均衡之Memcached緩存模塊,需要的朋友可以參考下
    2024-06-06

最新評論