最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年07月21日 09:51:16   作者:張京  
這篇文章主要給大家介紹了關于利用nginx訪問日志如何記錄mysql中用戶id的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。

前言

大家應該都知道,nginx有很強大的日志功能,但是在缺省狀態(tài)下,它只能記錄用戶的IP地址以及瀏覽器信息。如果我們有用戶登錄注冊系統(tǒng),在用戶已登錄的情況下,想記錄訪問某一個網(wǎng)頁的到底是哪一個用戶,怎么辦呢?因為我們不只想知道到底是哪一個IP地址訪問了哪一個網(wǎng)頁,并且還想知道到底是哪一個登錄用戶訪問了哪一個網(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)登錄,但是日志里沒有任何與用戶相關的信息,只有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這樣的形式。

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

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

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

nginx缺省的日志格式第二部分就是用戶信息,但通常什么也沒有,只是一個-,這里我們它改造成我們從后端傳進來的header信息。由上文我們創(chuàng)造的特殊header是X-UID,這里需要先做一個小的轉(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相關的設置里,因為我們上面給日志格式起名為front,所以在這里我們引用它時,需要指明用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個數(shù)字52248,這就是我們登錄用戶的個人ID。我這里的例子比較簡單,如果你不嫌麻煩,甚至可以把登錄用戶的所有個人信息,包括手機號、郵箱全部打印在日志里,就看你是否顧慮安全問題了。

對用戶隱藏id

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

proxy_hide_header X-UID;

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

最終處理

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

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Nginx優(yōu)化配置和內(nèi)核優(yōu)化 實現(xiàn)突破十萬并發(fā)

    Nginx優(yōu)化配置和內(nèi)核優(yōu)化 實現(xiàn)突破十萬并發(fā)

    Nginx是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。本文介紹一些Nginx優(yōu)化代碼參數(shù)等
    2013-06-06
  • 關于Nginx跨域問題及解決方案(CORS)

    關于Nginx跨域問題及解決方案(CORS)

    文章主要介紹了跨域資源共享(CORS)機制及其在現(xiàn)代Web開發(fā)中的重要性,通過Nginx,可以簡單地解決跨域問題,適合新手學習和應用,文章詳細講解了CORS的基本概念、常見的跨域場景、Nginx如何解決CORS問題,以及如何配置Nginx來處理CORS請求
    2025-02-02
  • 深入淺析Nginx虛擬主機

    深入淺析Nginx虛擬主機

    對于Nginx而言,每一個虛擬主機相當于一個在同一臺服務器中卻相互獨立的站點,從而實現(xiàn)一臺主機對外提供多個 web 服務,每個虛擬主機之間是獨立的,互不影響的。這篇文章主要介紹了Nginx虛擬主機的相關知識,需要的朋友可以參考下
    2020-07-07
  • 使用Nginx反向代理到go-fastdfs的方法示例

    使用Nginx反向代理到go-fastdfs的方法示例

    這篇文章主要介紹了使用Nginx反向代理到go-fastdfs的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 詳解阿里云nginx服務器多站點的配置

    詳解阿里云nginx服務器多站點的配置

    本篇文章主要介紹了阿里云nginx服務器多站點的配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • CentOS6使用nginx搭建web網(wǎng)站服務的方法

    CentOS6使用nginx搭建web網(wǎng)站服務的方法

    這篇文章主要介紹了CentOS6使用nginx搭建web網(wǎng)站服務的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Nginx配置本地圖片服務器的實現(xiàn)

    Nginx配置本地圖片服務器的實現(xiàn)

    本文主要介紹了Nginx配置本地圖片服務器的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 利用Nginx代理如何解決前端跨域問題詳析

    利用Nginx代理如何解決前端跨域問題詳析

    這篇文章主要給大家介紹了關于利用Nginx代理如何解決前端跨域問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • Nginx?403?forbidden錯誤的五種原因及詳細解決方法

    Nginx?403?forbidden錯誤的五種原因及詳細解決方法

    這篇文章主要給大家介紹了關于Nginx?403?forbidden錯誤的五種原因及詳細解決方法,相信很多人對403 forbidden是什么意思有了大致的了解,那么當我們遇到403 forbidden怎么解決呢,需要的朋友可以參考下
    2023-08-08
  • nginx http響應限速的具體實現(xiàn)

    nginx http響應限速的具體實現(xiàn)

    本文主要介紹了nginx http響應限速的具體實現(xiàn),可以使用limite_rate和limit_rate_after來限制HTTP響應的速度,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05

最新評論

江孜县| 夏津县| 阜康市| 靖远县| 松阳县| 威远县| 日土县| 罗山县| 淅川县| 化州市| 大城县| 弥渡县| 连平县| 平陆县| 神农架林区| 平度市| 克拉玛依市| 梁山县| 凤翔县| 宝坻区| 晋江市| 察隅县| 荆州市| 淄博市| 石景山区| 汤阴县| 时尚| 靖宇县| 呼玛县| 开原市| 嘉兴市| 大同县| 会泽县| 封丘县| 会东县| 微山县| 靖州| 潮州市| 新宾| 永城市| 拉萨市|