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

Nginx純配置實現(xiàn)日志實時上報的思路與方法

 更新時間:2021年12月29日 09:28:10   作者:須臾同學69925  
在很多時候我們都需要在頁面上實時查看nginx的日志輸出,所以下面這篇文章主要給大家介紹了關于Nginx純配置實現(xiàn)日志實時上報的思路與方法,需要的朋友可以參考下

前言

Nginx 作為常用的負載均衡網(wǎng)關. 會產(chǎn)生大量的日志. 但是由于 Nginx 的配置文件是一種聲明式的編程范式, 不方便描述流程控制, 因此不能通過簡單的指令實現(xiàn)日志的上報.

通常 Nginx 的日志上報是需要寫一個shell腳本或其他語言的腳本來定時解析 Nginx 的 log 文件, 然后進行上報.

利用 NJS 模塊, 可以實現(xiàn)實時的日志上報.

但是由于 NJS 模塊支持的指令的限制, 無法通過單一指令很好的實現(xiàn)日志上報. 通過多個指令的組合可以實現(xiàn)非阻塞性的實時日志上報.

該方案在 Nginx 中實現(xiàn), 不依賴Node, Python 等其他進程

實現(xiàn)思路

Nginx 指令繁多, 以下為最近探索出的一種實現(xiàn)方式. 如果有更優(yōu)雅的實現(xiàn)方法, 歡迎留言交流.

雖然擁有了強大的 Njs 模塊可以寫 JS 腳本, 但是 NJS 模塊的指令有諸多限制, 并不像 Node 一樣可以實現(xiàn)任意的功能.

如果要實現(xiàn)日志的實時上報, 需要滿足以下2個能力:

  1. 每個請求都可以觸發(fā)
  2. 后臺上報, 不阻塞當前請求的處理進程

常用的 js_set 指令雖然可以在每個請求時都觸發(fā), 但是只支持同步的操作. 無法使用 fetch, subrequest 方法.

js_content 指令中可以使用 fetch 函數(shù). 但只能在 location 中使用. 因此可以利用其他指令將請求轉發(fā)到 js_content 的路徑中, 在該指令中完成日志的上報.

而 http_auth_request_module 模塊的 auth_request 指令用于做請求的權限校驗, 如 jwt 校驗等. 該指令在每個請求時都會觸發(fā), 創(chuàng)建一個子請求, 根據(jù)該請求的返回結果決定權限校驗的結果.

因此可以結合這兩個模塊來實現(xiàn)日志的上報.

實現(xiàn)步驟

1. 編譯 Nginx

實現(xiàn)該功能需要 Nginx 支持 ngx_http_js_module 和? ngx_http_auth_request_module 模塊.? 這2個模塊是默認不安裝的. 需要自己編譯實現(xiàn)

  1. NJS 模塊安裝可以參考 當JS邂逅Nginx
  2. http_auth_request_module 模塊只要在編譯時增加參數(shù) --with-http_auth_request_module 即可

編譯

./configure --add-module=[NJS 模塊路徑]/NJS/nginx --with-http_auth_request_module 

make && make install 

2. 配置文件如下

http {
    js_import  http.js;   # 引入 js 文件
   
    server {
        listen 80;
    
        auth_request /proxy_report; # 該指令對于每個請求開始時都會觸發(fā), 創(chuàng)建一個子請求轉發(fā)到 proxy_report 路徑上
        location / { 
            index  index.html index.htm;
        }
        
        location /proxy_report {
            internal; # 限制僅接受內(nèi)部請求
            # 把原請求的 uri 和 method 數(shù)據(jù)保存在 header 中. 因為auth_request 請求會修改這些數(shù)據(jù).            
            proxy_set_header X-Original-URI $request_uri;
            proxy_set_header X-Original-METHOD $request_method;
            # 轉發(fā)到另外一個 server 上
            proxy_pass http://localhost:8080/report;
        }
    }
    
    server {
        listen 8080;
        # 上報接口放在另外一個 server 中, 且該 server 中無 auth_request 指令, 避免循環(huán)觸發(fā)請求
        location /report {
            # 通過 js_content 指令引入一個 js 處理腳本, 完成上報操作
            js_content http.report;
        }
    }
}
// http.js 文件

import qs from "querystring";

async function report (r) {
    let args = {
        // 從 header 中取原始的 uri 和 method 等請求數(shù)據(jù)
        uri: r.headersIn['X-Original-URI'],
        method: r.headersIn['X-Original-METHOD'],
        remoteAddress: r.remoteAddress,
        status: r.status,
        headersIn: JSON.stringifry(r.headersIn),
    }
    // 發(fā)出異步請求, 不阻塞當前請求的進程, 在后臺完成上報
    ngx.fetch(`http://[上報服務路徑]?${qs.stringify(args)}`, {
        method: 'GET',
    })
    // 返回200的狀態(tài)碼使校驗指令成功
    r.return(200)
}

export default { report }

總結

到此這篇關于Nginx純配置實現(xiàn)日志實時上報的思路與方法的文章就介紹到這了,更多相關Nginx日志實時上報內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用nginx方式實現(xiàn)http轉換為https的示例代碼

    使用nginx方式實現(xiàn)http轉換為https的示例代碼

    這篇文章主要介紹了使用nginx方式實現(xiàn)http轉換為https的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 詳解CentOS配置Nginx官方的Yum源

    詳解CentOS配置Nginx官方的Yum源

    這篇文章主要介紹了詳解CentOS配置Nginx官方的Yum源,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 修改Nginx配置返回指定content-type的方法

    修改Nginx配置返回指定content-type的方法

    nginx作為一個http服務器,在功能實現(xiàn)方面和性能方面都表現(xiàn)的非常優(yōu)越,下面這篇文章主要給大家介紹了關于修改Nginx配置返回指定content-type的相關資料,需要的朋友可以參考下
    2022-09-09
  • Nginx的流式響應配置小結

    Nginx的流式響應配置小結

    Nginx的流式響應功能是一項非常實用的特性,它允許Nginx在接收后端服務器響應的同時,逐步將內(nèi)容發(fā)送給客戶端,本文主要介紹了Nginx的流式響應配置,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Nginx+Keepalived實現(xiàn)雙機主備的方法

    Nginx+Keepalived實現(xiàn)雙機主備的方法

    這篇文章主要介紹了Nginx+Keepalived實現(xiàn)雙機主備的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • nginx rewrite重寫規(guī)則與防盜鏈配置方法教程詳解

    nginx rewrite重寫規(guī)則與防盜鏈配置方法教程詳解

    這篇文章主要介紹了nginx rewrite重寫規(guī)則與防盜鏈配置方法教程詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Nginx動態(tài)IP黑名單的實現(xiàn)步驟

    Nginx動態(tài)IP黑名單的實現(xiàn)步驟

    為了封禁某些爬蟲或者惡意用戶對服務器的請求,我們需要建立一個動態(tài)的?IP?黑名單,本文主要介紹了Nginx動態(tài)IP黑名單的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • nginx和Apache配置SSL證書的實現(xiàn)步驟

    nginx和Apache配置SSL證書的實現(xiàn)步驟

    SSL證書是一種數(shù)字證書,用于加密在網(wǎng)絡上發(fā)送的數(shù)據(jù)并保護敏感信息的安全性,本文主要介紹了nginx和Apache配置SSL證書的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • nginx ServerName匹配規(guī)則實現(xiàn)

    nginx ServerName匹配規(guī)則實現(xiàn)

    本文主要介紹了nginx ServerName匹配規(guī)則實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2007-02-02
  • nginx正向代理與反向代理詳解

    nginx正向代理與反向代理詳解

    本文給大家分享的是nginx實現(xiàn)正向代理和反向代理的具體方法配置以及不同的實例情況,非常的詳細,希望大家能夠喜歡
    2020-03-03

最新評論

长海县| 田阳县| 民和| 潼关县| 灌阳县| 临江市| 郯城县| 横峰县| 上犹县| 新郑市| 绩溪县| 宁蒗| 阿图什市| 阿鲁科尔沁旗| 黔江区| 年辖:市辖区| 兴和县| 西吉县| 清涧县| 福清市| 昂仁县| 隆回县| 和静县| 沙洋县| 法库县| 内黄县| 汽车| 琼海市| 鄂尔多斯市| 平山县| 康乐县| 石台县| 杭锦后旗| 河源市| 乌恰县| 文安县| 商丘市| 尼玛县| 黎城县| 赣榆县| 沾化县|