這篇文章主要為大家介紹了關於利用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中文網其他相關文章!

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

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