亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

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

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

實現(xiàn)思路

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

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

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

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

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

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

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

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

實現(xiàn)步驟

1. 編譯 Nginx

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

  1. NJS 模塊安裝可以參考 當(dāng)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)建一個子請求轉(zhuǎn)發(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;
            # 轉(zhuǎn)發(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ā)出異步請求, 不阻塞當(dāng)前請求的進(jìn)程, 在后臺完成上報
    ngx.fetch(`http://[上報服務(wù)路徑]?${qs.stringify(args)}`, {
        method: 'GET',
    })
    // 返回200的狀態(tài)碼使校驗指令成功
    r.return(200)
}

export default { report }

總結(jié)

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

相關(guān)文章

  • Nginx+SpringBoot實現(xiàn)負(fù)載均衡的示例

    Nginx+SpringBoot實現(xiàn)負(fù)載均衡的示例

    這篇文章主要介紹了Nginx優(yōu)雅的實現(xiàn)負(fù)載均衡,幫助大家更好的理解和使用nginx,感興趣的朋友可以了解下
    2020-10-10
  • Nginx實現(xiàn)if多重判斷配置方法示例

    Nginx實現(xiàn)if多重判斷配置方法示例

    這篇文章主要介紹了Nginx實現(xiàn)if多重判斷配置方法示例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • Nginx 配置根據(jù)請求IP末段進(jìn)行分流的方法

    Nginx 配置根據(jù)請求IP末段進(jìn)行分流的方法

    這篇文章主要介紹了Nginx 配置根據(jù)請求IP末段進(jìn)行分流的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • NGINX阻止指定ip的請求問題及解決方案

    NGINX阻止指定ip的請求問題及解決方案

    web頁面做了一個功能,在websocket請求失敗的情況,會定時向服務(wù)端進(jìn)行重試進(jìn)行建立連接,這篇文章給大家介紹NGINX阻止指定ip的請求問題及解決方案,感興趣的朋友一起看看吧
    2024-02-02
  • Windows下用Nginx配置https服務(wù)器及反向代理的問題

    Windows下用Nginx配置https服務(wù)器及反向代理的問題

    這篇文章主要介紹了Windows下用Nginx配置https服務(wù)器及反向代理的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • nginx的FastDFS分布式存儲模塊測試方法

    nginx的FastDFS分布式存儲模塊測試方法

    很長時間沒有關(guān)注FastDFS了,第一次使用FastDFS 是在 08年的時候11月的時候,那個時候是為了解決公司的數(shù)據(jù)存儲~那時候可能是對Fastdfs了解不深,功能還不算太健全,最后選擇了lustre。
    2010-12-12
  • Nginx Location指令URI匹配規(guī)則詳解小結(jié)

    Nginx Location指令URI匹配規(guī)則詳解小結(jié)

    這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Nginx服務(wù)優(yōu)化配置方案

    Nginx服務(wù)優(yōu)化配置方案

    這篇文章主要介紹了Nginx服務(wù)優(yōu)化配置方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-03-03
  • Nginx實現(xiàn)服務(wù)端集群搭建

    Nginx實現(xiàn)服務(wù)端集群搭建

    本文介紹了如何搭建Nginx服務(wù)端集群,主要包括動靜分離及其Tomcat集群搭建,通過本文可以了解如何搭建高效、可擴(kuò)展、高可用的服務(wù)器架構(gòu),提高網(wǎng)站性能和可靠性,感興趣的可以了解一下
    2023-08-08
  • 一文教會你使用Nginx訪問日志統(tǒng)計PV與UV

    一文教會你使用Nginx訪問日志統(tǒng)計PV與UV

    做網(wǎng)站的都知道,平常經(jīng)常要查詢下網(wǎng)站PV、UV等網(wǎng)站的訪問數(shù)據(jù),所以下面這篇文章主要給大家介紹了關(guān)于如何使用Nginx訪問日志統(tǒng)計PV與UV的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05

最新評論