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

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

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

前言

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

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

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

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

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

實(shí)現(xiàn)思路

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

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

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

  1. 每個(gè)請(qǐng)求都可以觸發(fā)
  2. 后臺(tái)上報(bào), 不阻塞當(dāng)前請(qǐng)求的處理進(jìn)程

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

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

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

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

實(shí)現(xiàn)步驟

1. 編譯 Nginx

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

  1. NJS 模塊安裝可以參考 當(dāng)JS邂逅Nginx
  2. http_auth_request_module 模塊只要在編譯時(shí)增加參數(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; # 該指令對(duì)于每個(gè)請(qǐng)求開始時(shí)都會(huì)觸發(fā), 創(chuàng)建一個(gè)子請(qǐng)求轉(zhuǎn)發(fā)到 proxy_report 路徑上
        location / { 
            index  index.html index.htm;
        }
        
        location /proxy_report {
            internal; # 限制僅接受內(nèi)部請(qǐng)求
            # 把原請(qǐng)求的 uri 和 method 數(shù)據(jù)保存在 header 中. 因?yàn)閍uth_request 請(qǐng)求會(huì)修改這些數(shù)據(jù).            
            proxy_set_header X-Original-URI $request_uri;
            proxy_set_header X-Original-METHOD $request_method;
            # 轉(zhuǎn)發(fā)到另外一個(gè) server 上
            proxy_pass http://localhost:8080/report;
        }
    }
    
    server {
        listen 8080;
        # 上報(bào)接口放在另外一個(gè) server 中, 且該 server 中無 auth_request 指令, 避免循環(huán)觸發(fā)請(qǐng)求
        location /report {
            # 通過 js_content 指令引入一個(gè) js 處理腳本, 完成上報(bào)操作
            js_content http.report;
        }
    }
}
// http.js 文件

import qs from "querystring";

async function report (r) {
    let args = {
        // 從 header 中取原始的 uri 和 method 等請(qǐng)求數(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ā)出異步請(qǐng)求, 不阻塞當(dāng)前請(qǐng)求的進(jìn)程, 在后臺(tái)完成上報(bào)
    ngx.fetch(`http://[上報(bào)服務(wù)路徑]?${qs.stringify(args)}`, {
        method: 'GET',
    })
    // 返回200的狀態(tài)碼使校驗(yàn)指令成功
    r.return(200)
}

export default { report }

總結(jié)

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

相關(guān)文章

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

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

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

    詳解CentOS配置Nginx官方的Yum源

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

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

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

    Nginx的流式響應(yīng)配置小結(jié)

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

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

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

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

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

    Nginx動(dòng)態(tài)IP黑名單的實(shí)現(xiàn)步驟

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

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

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

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

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

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

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

最新評(píng)論

越西县| 横峰县| 孟连| 原阳县| 利津县| 正镶白旗| 铅山县| 莱阳市| 长春市| 丹东市| 苗栗市| 和林格尔县| 黄石市| 浮梁县| 调兵山市| 酉阳| 榆树市| 易门县| 淳安县| 芦山县| 鄂托克前旗| 漳州市| 泽库县| 安图县| 睢宁县| 年辖:市辖区| 内江市| 和平区| 元朗区| 鄂托克前旗| 贵定县| 静乐县| 长葛市| 湘潭市| 彝良县| 离岛区| 达日县| 荣昌县| 开江县| 朔州市| 永州市|