3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ApacheアクセスログにユーザIDをうまく記録する方法

Last updated at Posted at 2020-06-23

はじめに

Apacheアクセスログを見返すときに、「ログ上にユーザIDが記録されてたら便利なのにな」とか思うことありませんか?
プログラム内で使われる各種情報をアクセスログに連携するためのベストプラクティスをご紹介します。

前提条件

  1. プログラム内の変数値をApacheアクセスログに記録できる
  2. Webサーバからクライアントには変数値を直接出力しない
  3. 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を出力していますが、その他にもログに残しておけば便利なものが多いのではないでしょうか。
それではみなさん、快適なログライフを!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?