nginxでaccess.logにアクセスユーザーの識別子を出すように設定
環境について
OS:debien
※これは設定ファイルの場所の違い等があるかもしれないがそれ以外はどれでも同じ
nginx: 1.17.6
言語: Go 1.11.2
基本的にはこちらを参考にしています。
nginxのアクセスログにユーザーIDを記録する方法
結構以前のものですがそのまま使えてます。助かりました。まずはnginxの設定から
vim /etc/nginx/nginx.conf こちらのログフォーマットを追加
> log_format sample-log '$remote_addr - $remote_user [$time_local] "$request" '
> '$status $body_bytes_sent "$http_referer" '
> '"$http_user_agent" "$http_x_forwarded_for" '
> '$upstream_http_x_user_id';
#該当アクセスログの出力設定に追加したログフォーマットを指定する
> access_log /var/log/nginx/access.log sample-log;
こちらを追加して、実行しているプログラムなりからHeader情報X-user-Idを追加することになります。
今回はGo言語だったので、IDが取れるのは各認証が必要なAPIは
認証関数が実行され、そこでIDが取得されるのでこちらに以下を記載
w.Header().Set("X-User-ID", fmt.Sprintf("%d", Id))/code>
w関数の引数で受け取っている
w http.ResponseWriter
これで
nginx -s reload
でアクセスログの最後にアクセスユーザーIDが出力するようになりました。
レスポンスヘッダーにX-User-Idが含まれないようにする対応もしています。
proxy_hide_header X-User-ID;
今回対応した環境はリバースプロキシだったのでこれでよかったですが、そうでない場合にmore_clear_headersディレクティブを使うパターンは試していません。
コメント
コメントを投稿