成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

用nginx訪問(wèn)日志記錄mysql數(shù)據(jù)庫(kù)中的用戶(hù)id

OldPanda / 1786人閱讀

摘要:有很強(qiáng)大的日志功能,但是在缺省狀態(tài)下,它只能記錄用戶(hù)的地址以及瀏覽器信息。缺省的日志格式在這里,我們看到,雖然用戶(hù)已經(jīng)登錄,但是日志里沒(méi)有任何與用戶(hù)相關(guān)的信息,只有地址。如果獲取到了,說(shuō)明用戶(hù)已登錄,則我們把他的輸出給這樣的形式。

nginx有很強(qiáng)大的日志功能,但是在缺省狀態(tài)下,它只能記錄用戶(hù)的IP地址以及瀏覽器信息。如果我們有用戶(hù)登錄注冊(cè)系統(tǒng),在用戶(hù)已登錄的情況下,想記錄訪問(wèn)某一個(gè)網(wǎng)頁(yè)的到底是哪一個(gè)用戶(hù),怎么辦呢?因?yàn)槲覀儾恢幌胫赖降资悄囊粋€(gè)IP地址訪問(wèn)了哪一個(gè)網(wǎng)頁(yè),并且還想知道到底是哪一個(gè)登錄用戶(hù)訪問(wèn)了哪一個(gè)網(wǎng)頁(yè),這對(duì)于我們?nèi)蘸笥嗅槍?duì)性地向他/她推薦信息甚至推送廣告都是非常有用的。

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"

在這里,我們看到,雖然用戶(hù)已經(jīng)登錄,但是日志里沒(méi)有任何與用戶(hù)相關(guān)的信息,只有ip地址。如果我們想記錄用戶(hù)的id等信息,怎么辦呢?

在PHP端輸出特殊的header

我們想到,既然用戶(hù)已登錄了,則它肯定有cookie或者session或者token信息,不管是哪種方式,我們的php一定是可以有效地獲取到這個(gè)用戶(hù)的信息的。在這里舉例我們通過(guò)session獲取到了用戶(hù)的id信息:

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

如果session里沒(méi)有用戶(hù)id,則說(shuō)明用戶(hù)還沒(méi)有登錄,則輸出X-UID: 0(或者也可以干脆什么也不輸出)。如果獲取到了session,說(shuō)明用戶(hù)已登錄,則我們把他的user_id輸出給nginx: X-UID: 12345這樣的形式。

在這里,你不止可以輸出一個(gè)信息,你可以輸出好幾個(gè)不同的字段,包括他的姓名、性別、年齡等等都可以。

創(chuàng)建一種新的日志格式

log_format只能被存儲(chǔ)在http段里,所以我們需要找到nginx.conf文件。

nginx缺省的日志格式第二部分就是用戶(hù)信息,但通常什么也沒(méi)有,只是一個(gè)-,這里我們它改造成我們從后端傳進(jìn)來(lái)的header信息。由上文我們創(chuàng)造的特殊headerX-UID,這里需要先做一個(gè)小的轉(zhuǎn)換,把大寫(xiě)字母全部改為小寫(xiě),把所有的-改為下劃線,就變成了x_uid,然后在前面拼接上$upstream_http_,就得到了最終的結(jié)果$upstream_http_x_uid,然后把它插入到日志格式任何你想讓它出現(xiàn)的地方:

log_format front "$remote_addr - $upstream_http_x_uid [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"";
在server里引用這種日志格式

server相關(guān)的設(shè)置里,因?yàn)槲覀兩厦娼o日志格式起名為front,所以在這里我們引用它時(shí),需要指明用front日志格式:

access_log /var/log/nginx/front-access.log front;
新的日志結(jié)果
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個(gè)數(shù)字52248,這就是我們登錄用戶(hù)的個(gè)人ID。我這里的例子比較簡(jiǎn)單,如果你不嫌麻煩,甚至可以把登錄用戶(hù)的所有個(gè)人信息,包括手機(jī)號(hào)、郵箱全部打印在日志里,就看你是否顧慮安全問(wèn)題了。

對(duì)用戶(hù)隱藏id

在上面的第一步,我們用php輸出了一個(gè)特殊header,本來(lái)我們這個(gè)header只是供nginx消費(fèi)用的,但是這個(gè)header會(huì)被nginx原封不動(dòng)地顯示給前端,可能會(huì)有細(xì)心的用戶(hù)感到不安。為此我們可以在nginx的server設(shè)置里再加一個(gè)小開(kāi)關(guān),隱藏掉這個(gè)頭部:

proxy_hide_header X-UID;

這樣用戶(hù)從瀏覽器端就看不到這個(gè)特殊頭部了,而并不影響nginx記錄它。

最終處理

那么我們費(fèi)這么大力氣,記錄下來(lái)一個(gè)ID有什么用呢?這個(gè)用處可就大了。大家都知道我們有一個(gè)日志分析的利器logstash,通過(guò)它結(jié)合上ELK組件可以分析處理Apache或者nginx日志。如果我們沒(méi)有這個(gè)ID信息的話,最多也只能分析出來(lái)哪一個(gè)網(wǎng)頁(yè)經(jīng)常被用戶(hù)訪問(wèn),僅此而已。但現(xiàn)在我們有了用戶(hù)ID,我們甚至可以連接mysql數(shù)據(jù)庫(kù)表進(jìn)行分析,研究哪一個(gè)年齡段的,哪一個(gè)性別的,或者哪一個(gè)城市的用戶(hù)喜歡訪問(wèn)什么網(wǎng)頁(yè),甚至有針對(duì)性地了解具體某一個(gè)用戶(hù),他喜歡在什么時(shí)間段訪問(wèn)什么網(wǎng)頁(yè),進(jìn)而有針對(duì)性地為他提供定制化的服務(wù)。這還不夠強(qiáng)大嗎?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/39625.html

相關(guān)文章

  • nginx訪問(wèn)日志記錄mysql數(shù)據(jù)庫(kù)中的戶(hù)id

    摘要:有很強(qiáng)大的日志功能,但是在缺省狀態(tài)下,它只能記錄用戶(hù)的地址以及瀏覽器信息。缺省的日志格式在這里,我們看到,雖然用戶(hù)已經(jīng)登錄,但是日志里沒(méi)有任何與用戶(hù)相關(guān)的信息,只有地址。如果獲取到了,說(shuō)明用戶(hù)已登錄,則我們把他的輸出給這樣的形式。 nginx有很強(qiáng)大的日志功能,但是在缺省狀態(tài)下,它只能記錄用戶(hù)的IP地址以及瀏覽器信息。如果我們有用戶(hù)登錄注冊(cè)系統(tǒng),在用戶(hù)已登錄的情況下,想記錄訪問(wèn)某一個(gè)網(wǎng)...

    zhongmeizhi 評(píng)論0 收藏0
  • LNMP+HAProxy+Keepalived負(fù)載均衡(三)- 配置文件匯總

    摘要:的操作命令將端口由修改為,修改內(nèi)容如下具體配置可參考下面的配置文件重啟,并查看其狀態(tài)的配置文件服務(wù)器需要修改的配置,僅用參考端口根據(jù)自己的情況修改站點(diǎn)根目錄可以加載自己的配置文件,這里我把配置文件中的內(nèi)容直接替換了原本的節(jié) Nginx的操作命令 vim /usr/local/nginx/conf/nginx.conf # 將端口由80修改為10001,修改內(nèi)容如下: listen ...

    894974231 評(píng)論0 收藏0
  • Nginx

    摘要:主進(jìn)程不直接響應(yīng)瀏覽器,是管理子進(jìn)程使用。瀏覽器訪問(wèn)會(huì)到子進(jìn)程中響應(yīng)。日志需要備份,文件在被進(jìn)程所打開(kāi),不能使用命令。是設(shè)置變量使用,可以達(dá)到多條件判斷時(shí)做標(biāo)記使用。 nginx 簡(jiǎn)介 高性能WEB服務(wù)器 Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器.Nginx 是由Igor Sysoev為落實(shí)訪問(wèn)量第二...

    luck 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<