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

Nginx?map?實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換的方法

 更新時(shí)間:2023年09月15日 08:58:33   作者:咸魚Linux運(yùn)維  
最近我們需要把?Nginx?的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持?JSON?格式,所以需要把?Nginx?日志格式改成?JSON?格式,這篇文章主要介紹了Nginx?map?實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換,需要的朋友可以參考下

最近我們需要把 Nginx 的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式

例如下面這樣的效果

剛開始在主配置文件 nginx.conf 中定義了一個(gè)名叫 json 的日志格式字段

驗(yàn)證的時(shí)候其他內(nèi)容沒啥問題,但是時(shí)間是 2023-09-12T13:54:22+08:00 這樣子的,不太符合預(yù)期

咸魚想著把 $time_iso8601 變量中的年月日時(shí)分秒分別提取出來然后用變量去接受它,如下所示:

我自定義了一個(gè)時(shí)間格式 $year-$month-$day $hour:$minutes:$seconds:000 ,然后接著用了一個(gè) if 語句用于檢查請(qǐng)求的時(shí)間是否匹配 ISO8601 時(shí)間格式(例如: 2023-09-12T13:54:22+08:00

如果匹配,它將執(zhí)行其中的代碼塊。在代碼塊中,使用正則表達(dá)式提取時(shí)間的年、月、日、小時(shí)、分鐘和秒,并將它們賦值給變量 $year 、 $month $day 、 $hour 、 $minutes $seconds

    log_format json '{  "SYS_NO":"my_nginx",
                        "OS_TIME":"$year-$month-$day $hour:$minutes:$seconds",
                        "LOG_TYPE":"",
                        "RESULT":"$status",
                        "SPENT_TIME":"$request_time",
                        "CLIENT_IP":"$remote_addr",
                        "SERVER_IP":"$server_addr",
                        "O_CHANNEL":"$http_user_agent",
                        "UID":"$http_host",
                        "VALUE1":$body_bytes_sent,
                        "INFO1":"$http_referer",
					}';
	  if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
                        set $year $1;
                        set $month $2;
                        set $day $3;
                        set $hour $4;
                        set $minutes $5;
                        set $seconds $6;
                        }

但是 nginx -t 檢測(cè)的時(shí)候我發(fā)現(xiàn) if 語句不能夠放在 http 塊內(nèi),否則會(huì)報(bào)錯(cuò)

在 Nginx 中,if 語句主要用于在 server location 塊內(nèi)設(shè)置條件,以便根據(jù)請(qǐng)求的屬性來執(zhí)行不同的配置。if 語句通常應(yīng)該包含在 server location 塊內(nèi),而不是直接放在 http 塊中

如果將 if 語句放在一個(gè)一個(gè) server 塊中,這不得累死我(有很多個(gè) server 塊),而且后期維護(hù)也不方便

所以如何將自定義變量在全局配置中生效則成為了一個(gè)問題

map

map 指令是由 ngx_http_map_module 模塊提供的,是 Nginx 配置文件中的一種用于創(chuàng)建變量映射的指令

模塊鏈接:Module ngx_http_map_module (nginx.org)

它允許我們將一個(gè)或多個(gè)輸入值映射到一個(gè)輸出值,類似于字典或哈希表的概念。 map 指令通常用于根據(jù)特定條件為請(qǐng)求設(shè)置自定義變量,或者執(zhí)行基于請(qǐng)求屬性的條件控制

比較常見的 map 用法是通過 map 來實(shí)現(xiàn)允許多個(gè)域名跨域訪問的問題

語法如下:

map $variable $new_variable {
    value1   result1;
    value2   result2;
    ...
    default  default_result;
}

其中:

  • $variable 輸入變量,通常是 nginx 的內(nèi)置變量。
  • $new_variable 輸出變量,它將根據(jù)輸入值的映射設(shè)置為特定的結(jié)果。
  • value1 , value2 , ... 輸入值,可以列出多個(gè)值。
  • result1 , result2 , ... 與相應(yīng)輸入值相關(guān)聯(lián)的輸出結(jié)果。
  • default 一個(gè)可選項(xiàng),表示如果沒有匹配的輸入值,將使用默認(rèn)結(jié)果

需要注意的是,map 只能放在 http 塊中

有了 map,我們就可以輕易的把 $time_iso8601 變量中的 ISO 8601 格式的時(shí)間戳轉(zhuǎn)換為指定的時(shí)間格式,然后存儲(chǔ)到自定義變量 $log_time

# nginx.conf
	map $time_iso8601 $log_time {
        default "";
        "~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})" "${year}-${month}-${day} ${hour}:${minutes}:${seconds}";
    }

我們可以看到:

  • 輸入變量為 $time_iso8601,輸出變量為 $log_time;
  • default "":如果沒有匹配任何條件,將使用空字符串作為 $log_time 的值
  • "~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})":這是一個(gè)正則表達(dá)式條件,它用于匹配 ISO 8601 格式的時(shí)間戳。該正則表達(dá)式包含了多個(gè)捕獲組(使用 ?<name> 語法),用于從時(shí)間戳中提取年、月、日、小時(shí)、分鐘和秒的值
  • "${year}-${month}-${day} ${hour}:${minutes}:${seconds}":這是與正則表達(dá)式條件匹配時(shí)設(shè)置的輸出值。當(dāng)正則表達(dá)式條件匹配時(shí),它會(huì)將捕獲組中提取的年、月、日、小時(shí)、分鐘和秒的值組合成一個(gè)自定義的時(shí)間格式,然后將該值設(shè)置為 $log_time 變量的值

例如,如果 $time_iso8601 的值是 "2023-09-09T14:30:00",則 $log_time 將被設(shè)置為 "2023-09-09 14:30:00"

然后我們?cè)侔?$log_time 放進(jìn)我們自定義的日志格式里面,完整配置如下

    log_format json '{  "SYS_NO":"my_nginx",
                        "OS_TIME":"$log_time",
                        "LOG_TYPE":"",
                        "RESULT":"$status",
                        "SPENT_TIME":"$request_time",
                        "CLIENT_IP":"$remote_addr",
                        "SERVER_IP":"$server_addr",
                        "O_CHANNEL":"$http_user_agent",
                        "UID":"$http_host",
                        "VALUE1":$body_bytes_sent,
                        "INFO1":"$http_referer",
		}';
	map $time_iso8601 $log_time {
    	default "";
        "~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})" "${year}-${month}-${day} ${hour}:${minutes}:${seconds}";
    }

最后我們驗(yàn)證一下

到此這篇關(guān)于Nginx map 實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Nginx map 實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Nginx進(jìn)行URL轉(zhuǎn)發(fā)的配置案例

    使用Nginx進(jìn)行URL轉(zhuǎn)發(fā)的配置案例

    Nginx是一個(gè)高性能的Web服務(wù)器和反向代理服務(wù)器,它還可以用于URL轉(zhuǎn)發(fā),在本教學(xué)文章中,我們將從安裝Nginx開始,逐步介紹配置步驟,并展示一個(gè)URL轉(zhuǎn)發(fā)的案例,感興趣的朋友可以參考下
    2023-09-09
  • Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程

    Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程

    今天通過本文給大家分享Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程,在這小編提示大家在安裝nginx時(shí)需要先安裝nginx-full,具體安裝方法跟隨小編一起通過本文學(xué)習(xí)下吧
    2021-05-05
  • Nginx的一些基本功能極速入門

    Nginx的一些基本功能極速入門

    本文主要介紹一些Nginx的最基本功能以及簡(jiǎn)單配置,但不包括Nginx的安裝部署以及實(shí)現(xiàn)原理。有興趣的可以了解一下。
    2016-12-12
  • nginx部署前端項(xiàng)目后刷新瀏覽器報(bào)錯(cuò)404問題解決

    nginx部署前端項(xiàng)目后刷新瀏覽器報(bào)錯(cuò)404問題解決

    現(xiàn)在前端頁面部署正常訪問,但是刷新的時(shí)候出現(xiàn)了404,所以下面給整理下,這篇文章主要給大家介紹了關(guān)于nginx部署前端項(xiàng)目后刷新瀏覽器報(bào)錯(cuò)404問題的解決辦法,需要的朋友可以參考下
    2023-11-11
  • 在Nginx服務(wù)器上安裝SSL證書完成HTTPS請(qǐng)求的步驟詳解(springboot項(xiàng)目)

    在Nginx服務(wù)器上安裝SSL證書完成HTTPS請(qǐng)求的步驟詳解(springboot項(xiàng)目)

    這篇文章主要介紹了在Nginx服務(wù)器上安裝SSL證書完成HTTPS請(qǐng)求(springboot項(xiàng)目),首先需要下載證書到本地接著在Nginx獨(dú)立服務(wù)器上安裝證書,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-04-04
  • 利用Nginx反向代理功能解決WEB網(wǎng)站80端口被封的解決方法

    利用Nginx反向代理功能解決WEB網(wǎng)站80端口被封的解決方法

    大陸的網(wǎng)絡(luò)環(huán)境,都在天朝神獸的制度下讓我等小P民悲劇一片;動(dòng)不動(dòng)就拔網(wǎng)線、封機(jī)房;現(xiàn)在更厲害的一招,從網(wǎng)關(guān)封殺你的80端口,一旦被封,網(wǎng)站域名就無法訪問
    2012-08-08
  • nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080

    nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080

    這篇文章主要介紹了nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Nginx自定義日志中時(shí)間格式的操作方法

    Nginx自定義日志中時(shí)間格式的操作方法

    工作需要對(duì)接內(nèi)部的日志中臺(tái),對(duì)日志打印有固定的格式要求,為了使Nginx的access日志也能被采集,需要對(duì)日志格式進(jìn)行自定義,這篇文章主要介紹了Nginx自定義日志中時(shí)間格式,需要的朋友可以參考下
    2023-11-11
  • 利用Nginx實(shí)現(xiàn)URL重定向的簡(jiǎn)單方法

    利用Nginx實(shí)現(xiàn)URL重定向的簡(jiǎn)單方法

    使用Nginx的重定向功能時(shí),除了可以重定向到新域名,還可以將請(qǐng)求重定向到特定的協(xié)議上,下面這篇文章主要給大家介紹了關(guān)于如何利用Nginx實(shí)現(xiàn)URL重定向的簡(jiǎn)單方法,需要的朋友可以參考下
    2022-04-04
  • 在Nginx用htpasswd對(duì)網(wǎng)站進(jìn)行密碼保護(hù)的設(shè)置方法

    在Nginx用htpasswd對(duì)網(wǎng)站進(jìn)行密碼保護(hù)的設(shè)置方法

    很多時(shí)候我們需要對(duì)一些網(wǎng)站進(jìn)行密碼保護(hù),比如團(tuán)隊(duì)內(nèi)部的站點(diǎn)、demo站點(diǎn)等等。這里所說的密碼保護(hù)是服務(wù)器級(jí)的,并非網(wǎng)站應(yīng)用層的注冊(cè)登錄那一套,而是利用服務(wù)器配置和htpasswd文件來實(shí)現(xiàn)訪問的密碼驗(yàn)證
    2013-06-06

最新評(píng)論

潮州市| 唐山市| 博爱县| 霸州市| 横峰县| 临朐县| 沙坪坝区| 岐山县| 元江| 文水县| 武邑县| 苗栗县| 克什克腾旗| 阳高县| 永济市| 阿合奇县| 巴彦县| 盖州市| 大名县| 乌鲁木齐县| 和顺县| 大理市| 水城县| 平邑县| 遂昌县| 阿克苏市| 璧山县| 霍林郭勒市| 邯郸市| 南澳县| 清原| 涟源市| 新晃| 文成县| 黔西县| 濉溪县| 吐鲁番市| 胶南市| 石棉县| 多伦县| 安溪县|