最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

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

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

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

1. 背景

假設(shè)我們有一個(gè) 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

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

(4) 驗(yàn)證新配置

nginx -T | grep doudian_v2

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

(5) 避免配置沖突

  • 監(jiān)聽相同端口和域名:Nginx 會(huì)按文件名順序加載,可能導(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)鍵點(diǎn)總結(jié)

步驟命令說明
檢查配置nginx -t確保語法正確
重載配置nginx -s reload不中斷服務(wù)生效
驗(yàn)證配置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)化點(diǎn):

  • 使用 order_by(LoginLog.login_time.desc()) 確保最新記錄在前。
  • 增加異常處理,避免因查詢錯(cuò)誤導(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)鍵點(diǎn)總結(jié)

優(yōu)化項(xiàng)原代碼問題優(yōu)化方案
排序未指定順序order_by(LoginLog.login_time.desc())
異常處理無錯(cuò)誤捕獲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):
        """分頁(yè)查詢登錄日志,按時(shí)間倒序排列"""
        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é)與最佳實(shí)踐

1. Nginx 配置管理最佳實(shí)踐

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

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

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

結(jié)語

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

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

相關(guān)文章

  • 詳解實(shí)現(xiàn)Nginx+Tomcat實(shí)現(xiàn)單IP、多域名、多站點(diǎn)的訪問

    詳解實(shí)現(xiàn)Nginx+Tomcat實(shí)現(xiàn)單IP、多域名、多站點(diǎn)的訪問

    這篇文章主要介紹了詳解實(shí)現(xiàn)Nginx+Tomcat實(shí)現(xiàn)單IP、多域名、多站點(diǎn)的訪問的相關(guān)資料,這里提供實(shí)例幫助到大家實(shí)現(xiàn)改功能,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • nginx中的limit_req限速設(shè)置配置示例

    nginx中的limit_req限速設(shè)置配置示例

    這篇文章主要介紹了nginx中的limit_req限速設(shè)置配置示例,本文直接給出配置文件例子,其中包含大量中文注釋,需要的朋友可以參考下
    2015-03-03
  • nginx?攔截指定ip訪問指定url的實(shí)現(xiàn)示例

    nginx?攔截指定ip訪問指定url的實(shí)現(xiàn)示例

    本文主要介紹了nginx?攔截指定ip訪問指定url的實(shí)現(xiàn)示例,使用$http_x_forwarded_for變量來獲取客戶端的真實(shí)IP地址,感興趣的可以了解一下
    2024-12-12
  • Nginx配置方向代理及目錄白名單配置教程

    Nginx配置方向代理及目錄白名單配置教程

    文章介紹了Nginx反向代理的配置方法,包括基本配置、events配置、http配置、server配置和location配置,通過配置location塊,可以實(shí)現(xiàn)不同的請(qǐng)求路徑轉(zhuǎn)發(fā)到不同的后端服務(wù)器,此外,還介紹了目錄白名單的配置方法,可以根據(jù)請(qǐng)求的目錄路徑來決定是否轉(zhuǎn)發(fā)
    2026-02-02
  • Nginx配置文件中l(wèi)ocation配置的多種場(chǎng)景

    Nginx配置文件中l(wèi)ocation配置的多種場(chǎng)景

    location主要做定位功能,根據(jù)uri來進(jìn)行不同的定位,下面這篇文章主要給大家介紹了關(guān)于Nginx配置文件中l(wèi)ocation配置的多種場(chǎng)景,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Nginx出現(xiàn)403?Forbidden的幾種簡(jiǎn)單解決方式

    Nginx出現(xiàn)403?Forbidden的幾種簡(jiǎn)單解決方式

    這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • nginx proxy_cache 緩存配置詳解

    nginx proxy_cache 緩存配置詳解

    這篇文章主要介紹了nginx proxy_cache 緩存配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • nginx+tomcat實(shí)現(xiàn)多級(jí)反向代理的示例代碼

    nginx+tomcat實(shí)現(xiàn)多級(jí)反向代理的示例代碼

    本文介紹在CentOS系統(tǒng)下安裝Tomcat、配置虛擬主機(jī)多級(jí)目錄,并通過Nginx反向代理將請(qǐng)求轉(zhuǎn)發(fā)至指定IP,構(gòu)建多級(jí)代理拓?fù)鋵?shí)現(xiàn)負(fù)載均衡與訪問控制,感興趣的可以了解一下
    2025-07-07
  • Nginx http升級(jí)到https的完整步驟

    Nginx http升級(jí)到https的完整步驟

    這篇文章主要給大家介紹了關(guān)于Nginx http升級(jí)到https的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • nginx如何實(shí)現(xiàn)同個(gè)ip、端口訪問不同的項(xiàng)目(以路徑區(qū)分項(xiàng)目)

    nginx如何實(shí)現(xiàn)同個(gè)ip、端口訪問不同的項(xiàng)目(以路徑區(qū)分項(xiàng)目)

    這篇文章主要介紹了nginx如何實(shí)現(xiàn)同個(gè)ip、端口訪問不同的項(xiàng)目(以路徑區(qū)分項(xiàng)目),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

客服| 迭部县| 东港市| 临清市| 佳木斯市| 黎川县| 历史| 龙川县| 潼关县| 嵊州市| 青川县| 黔西| 亚东县| 富顺县| 永城市| 金溪县| 大冶市| 潜山县| 天峻县| 葵青区| 五指山市| 盈江县| 富阳市| 左权县| 花莲市| 盐城市| 荆门市| 涿鹿县| 开化县| 德昌县| 甘肃省| 民县| 农安县| 遂平县| 班玛县| 江门市| 新竹市| 宁乡县| 夏邑县| 新泰市| 美姑县|