搜尋
首頁資料庫mysql教程mysql中的使用者id如何使用nginx存取日誌來記錄?

這篇文章主要為大家介紹了關於利用nginx訪問日誌如何記錄mysql中用戶id的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。

前言

大家應該都知道,nginx有很強大的日誌功能,但在缺省狀態下,它只能記錄用戶的IP位址以及瀏覽器資訊。如果我們有使用者登入註冊系統,在使用者已登入的情況下,想記錄造訪某一個網頁的到底是哪一個用戶,該怎麼辦呢?因為我們不只想知道到底是哪一個IP地址訪問了哪一個網頁,並且還想知道到底是哪一個登錄用戶訪問了哪一個網頁,這對於我們日後有針對性地向他/她推薦信息甚至推送廣告都是非常有用的。下面話不多說,來一起看看詳細的介紹:

nginx缺省的日誌格式


127.0.0.1 - - [20/Jul/2017:22:04:08 +0800] "GET /news/index HTTP/1.1" 200 22262 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.66 Safari/537.36"

在這裡,我們看到,雖然用戶已經登錄,但是日誌裡沒有任何與用戶相關的信息,只有ip位址。如果我們想記錄用戶的id等信息,怎麼辦呢?

在PHP端輸出特殊的header

#我們想到,既然使用者已經登入了,則它肯定有cookie或session或是token訊息,不管是哪一種方式,我們的php一定是可以有效地取得到這個使用者的資訊的。這裡舉例我們透過session獲取到了用戶的id資訊:


$user_id = Yii::$app->session['user_id'];
if (empty($user_id)) {
 header('X-UID: 0');
} else {
 header('X-UID: ' . $user_id);
}

如果session裡沒有用戶id,則表示用戶還沒有登錄,則輸出X-UID: 0 (或者也可以乾脆什麼也不輸出)。如果取得到了session,表示使用者已登入,則我們把他的user_id輸出給nginx: X-UID: 12345這樣的形式。

在這裡,你不只可以輸出一個訊息,你可以輸出好幾個不同的字段,包括他的姓名、性別、年齡等等都可以。

建立一種新的日誌格式

log_format只能儲存在http段裡,所以我們需要找到nginx. conf檔案。

nginx缺省的日誌格式第二部分就是使用者訊息,但通常什麼也沒有,只是一個-,這裡我們它改造成我們從後端傳進來的header訊息。由上文我們創造的特殊header是X-UID,這裡需要先做一個小的轉換,把大寫字母全部改為小寫,把所有的-改為下劃線,就變成了x_uid,然後在前面拼接上$upstream_http_ ,就得到了最終的結果$upstream_http_x_uid,然後把它插入到日誌格式任何你想讓它出現的地方:


#
log_format front '$remote_addr - $upstream_http_x_uid [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

在server裡引用這種日誌格式

#在server相關的設定裡,因為我們上面給日誌格式取名為front,所以在這裡我們引用它時,需要指明用front日誌格式:


access_log /var/log/nginx/front-access.log front;

新的日誌結果


127.0.0.1 - 52248 [20/Jul/2017:22:35:40 +0800] "GET /news/view?id=56 HTTP/1.1" 200 19455 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.66 Safari/537.36"

注意:上面第2個數字52248,這就是我們登入使用者的個人ID。我這裡的例子比較簡單,如果你不嫌麻煩,甚至可以把登入使用者的所有個人資訊,包括手機號碼、信箱全部印在日誌裡,就看你是否顧慮安全問題了。

對使用者隱藏id

#在上面的第一步,我們用php輸出了一個特殊header,本來我們這個header只是供nginx消費的,但是這個header會被nginx原封不動地顯示給前端,可能會有細心的用戶感到不安。為此我們可以在nginx的server設定裡再加一個小開關,隱藏掉這個頭部:


proxy_hide_header X-UID;

這樣使用者從瀏覽器端就看不到這個特殊頭部了,而不影響nginx記錄它。

最終處理

那麼我們費這麼大力氣,記錄下來一個ID有什麼用呢?這個用處可就大了。大家都知道我們有日誌分析的利器logstash,透過它結合上ELK元件可以分析處理Apache或nginx日誌。如果我們沒有這個ID資訊的話,最多也只能分析出來哪一個網頁經常被使用者訪問,僅此而已。但現在我們有了用戶ID,我們甚至可以連接mysql資料庫表進行分析,研究哪一個年齡段的,哪一個性別的,或者哪一個城市的用戶喜歡訪問什麼網頁,甚至有針對性地了解具體某一個用戶,他喜歡在什麼時間段訪問什麼網頁,進而有針對性地為他提供客製化的服務。這樣還不夠強大嗎?

總結

以上是mysql中的使用者id如何使用nginx存取日誌來記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在MySQL中使用視圖的局限性是什麼?在MySQL中使用視圖的局限性是什麼?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations:1)他們不使用Supportallsqloperations,限制DatamanipulationThroughViewSwithJoinsOrsubqueries.2)他們canimpactperformance,尤其是withcomplexcomplexclexeriesorlargedatasets.3)

確保您的MySQL數據庫:添加用戶並授予特權確保您的MySQL數據庫:添加用戶並授予特權May 14, 2025 am 12:09 AM

porthusermanagementinmysqliscialforenhancingsEcurityAndsingsmenting效率databaseoperation.1)usecReateusertoAddusers,指定connectionsourcewith@'localhost'or@'%'。

哪些因素會影響我可以在MySQL中使用的觸發器數量?哪些因素會影響我可以在MySQL中使用的觸發器數量?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers,butacticalfactorsdeterminetheireffactective:1)serverConfiguration impactactStriggerGermanagement; 2)複雜的TriggerSincreaseSySystemsystem load; 3)largertablesslowtriggerperfermance; 4)highConconcConcrencerCancancancancanceTigrignecentign; 5); 5)

mysql:存儲斑點安全嗎?mysql:存儲斑點安全嗎?May 14, 2025 am 12:07 AM

Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

mySQL:通過PHP Web界面添加用戶mySQL:通過PHP Web界面添加用戶May 14, 2025 am 12:04 AM

通過PHP網頁界面添加MySQL用戶可以使用MySQLi擴展。步驟如下:1.連接MySQL數據庫,使用MySQLi擴展。 2.創建用戶,使用CREATEUSER語句,並使用PASSWORD()函數加密密碼。 3.防止SQL注入,使用mysqli_real_escape_string()函數處理用戶輸入。 4.為新用戶分配權限,使用GRANT語句。

mysql:blob和其他無-SQL存儲,有什麼區別?mysql:blob和其他無-SQL存儲,有什麼區別?May 13, 2025 am 12:14 AM

mysql'sblobissuitableForStoringBinaryDataWithInareLationalDatabase,而ilenosqloptionslikemongodb,redis和calablesolutionsolutionsolutionsoluntionsoluntionsolundortionsolunsonstructureddata.blobobobissimplobisslowdeperformberbutslowderformandperformancewithlararengedata;

mySQL添加用戶:語法,選項和安全性最佳實踐mySQL添加用戶:語法,選項和安全性最佳實踐May 13, 2025 am 12:12 AM

toaddauserinmysql,使用:createUser'username'@'host'Indessify'password'; there'showtodoitsecurely:1)choosethehostcarecarefullytocon trolaccess.2)setResourcelimitswithoptionslikemax_queries_per_hour.3)usestrong,iniquepasswords.4)Enforcessl/tlsconnectionswith

MySQL:如何避免字符串數據類型常見錯誤?MySQL:如何避免字符串數據類型常見錯誤?May 13, 2025 am 12:09 AM

toAvoidCommonMistakeswithStringDatatatPesInMysQl,CloseStringTypenuances,chosethirtightType,andManageEngencodingAndCollat​​ionsEttingSefectery.1)usecharforfixed lengengtrings,varchar forvariable-varchar forbariaible length,andtext/blobforlargerdataa.2 seterters seterters seterters

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用