在Apache访问日志中有效记录用户ID的方法

首先

当查看Apache访问日志时,您是否会想:“如果日志中记录有用户ID就好了。”?现在,我们将介绍一些在程序中将各种信息与访问日志相结合的最佳实践。

前置条件

    1. 可以将程序中的变量值记录在Apache访问日志中,但不直接从Web服务器输出给客户端

适用于Apache 2.4.7及以上版本

实施方式

从程序中输出一个合适的标题。

// PHPでの実装例
header("X-User-Id: 1234");

为了不直接将用户ID信息输出给用户,可以在Apache上进行以下设置。

# mod_headersを有効化
LoadModule headers_module modules/mod_headers.so
# レスポンスヘッダをnoteとしてxuseridに設定
Header always note X-User-Id xuserid
# レスポンスヘッダ出力を抑制
Header always unset X-User-Id
# 以下例ではログ末尾にユーザID情報を追加
LogFormat "%h %l %u %t \"%r\" %>s %b %{xuserid}o" common

如果想在Apache 2.2上实现的话

Apache 2.2.x无法默认删除响应头并进行日志输出。
通过使用以下模块,可以实现此功能。
https://github.com/kazeburo/mod_copy_header

LoadModule headers_module modules/mod_headers.so
LoadModule copyheader_module modules/mod_copy_header.so
<IfModule copyheader_module>
  CopyHeaderActive On
  CopyHeader X-User-Id
</IfModule>
Header unset X-User-Id
LogFormat "%h %l %u %t \"%r\" %>s %b %{X-User-Id}n" common

最后

在上述示例中,我们输出了用户ID,但是除此之外还有许多有用的东西可以记录在日志中。所以,大家都祝愿拥有愉快的日志生活!

广告
将在 10 秒后关闭
bannerAds