登录
首页 >  数据库 >  MySQL

用nginx访问日志记录mysql数据库中的用户id

来源:SegmentFault

时间:2023-02-16 15:40:40 126浏览 收藏

怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《用nginx访问日志记录mysql数据库中的用户id》,涉及到MySQL、日志、nginx、PHP,有需要的可以收藏一下

$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、日志、nginx、PHP的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>