国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

利用nginx訪問日志如何記錄mysql中的用戶id詳解

2024-08-30 12:25:29
字體:
來源:轉載
供稿:網友

前言

大家應該都知道,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;            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武穴市| 东城区| 定远县| 土默特左旗| 芜湖县| 三台县| 通山县| 房产| 老河口市| 双峰县| 上饶县| 拉孜县| 桂东县| 通江县| 双江| 翁牛特旗| 龙门县| 宁化县| 米易县| 太和县| 榆林市| 喜德县| 秦皇岛市| 乌审旗| 雷波县| 阿勒泰市| 墨竹工卡县| 衡水市| 韶关市| 景东| 惠安县| 长汀县| 开封市| 垫江县| 丰县| 德钦县| 光泽县| 邢台市| 祁东县| 鄂州市| 吴川市|