成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

OldPanda / 1740人閱讀

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

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

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"

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

在PHP端輸出特殊的header

我們想到,既然用戶已登錄了,則它肯定有cookie或者session或者token信息,不管是哪種方式,我們的php一定是可以有效地獲取到這個(gè)用戶的信息的。在這里舉例我們通過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這樣的形式。

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

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

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

nginx缺省的日志格式第二部分就是用戶信息,但通常什么也沒有,只是一個(gè)-,這里我們它改造成我們從后端傳進(jìn)來的header信息。由上文我們創(chuàng)造的特殊headerX-UID,這里需要先做一個(gè)小的轉(zhuǎn)換,把大寫字母全部改為小寫,把所有的-改為下劃線,就變成了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,這就是我們登錄用戶的個(gè)人ID。我這里的例子比較簡單,如果你不嫌麻煩,甚至可以把登錄用戶的所有個(gè)人信息,包括手機(jī)號、郵箱全部打印在日志里,就看你是否顧慮安全問題了。

對用戶隱藏id

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

proxy_hide_header X-UID;

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

最終處理

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39625.html

相關(guān)文章

  • nginx訪問日志記錄mysql數(shù)據(jù)庫中的id

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

    zhongmeizhi 評論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 評論0 收藏0
  • Nginx

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

    luck 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<