🌏

CloudFront→ELB→EC2構成でNginxのaccess.log出力の為に調べたことなど

2022/01/30に公開

いろいろ設定したり調べたことをメモ。

1. x-forwarded-for に書き込まれる内容

https://int128.hatenablog.com/entry/2017/09/13/143702

CloudFront → ELB → EC2(Nginx)の場合、Nginx到達時のx-forwarded-for ヘッダには、クライアントとCloudFrontのEdgeサーバのIPアドレスがの2つが書き込まれる。

/etc/nginx/nginx.conf 抜粋(デフォルト)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
acccess.log
192.168.xxx.xxx - - [30/Jan/2022:07:09:18 +0000] "GET /favicon.ico HTTP/1.1" 404 3665 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36" "123.456.789.123, 987.654.321.987"

123.456.789.123 ・・・クライアントのIPアドレス
987.654.321.987 ・・・CloudFrontのEdgeサーバのIPアドレス
  ※例の為、ありえないIP

2. ELBからのヘルスチェックのaccess.logログを除去

https://qiita.com/homoluctus/items/7f81ef8e7d23f3c18ffe

/etc/nginx/nginx.conf(追加・変更部分)
    map $http_user_agent $loggable {
        ~ELB-HealthChecker  0;
        default             1;
    }
    access_log  /var/log/nginx/access.log  main if=$loggable;

3.CloudFront HTTP ヘッダーをaccess.logに含めたい

CloudFront HTTP ヘッダーが使える。アクセス元の国とかaccess.logに含めたい
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/using-cloudfront-headers.html

/etc/nginx/nginx.conf(CloudFront HTTP ヘッダーの一部をログ出力するようにした例)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$http_cloudfront_viewer_country" '
                      '"$http_cloudfront_viewer_city" '
                      '"$http_cloudfront_viewer_postal_code"';

因みに、CloudFrontのビヘイビア(ELB)で、オリジンリクエストポリシーでマネージドの「AllViewer」を指定していたが、これではCloudFront HTTP ヘッダーはオリジンへ転送されなかったので、カスタムでオリジンリクエストポリシーを作成し、すべてのビューワーヘッダーとCloudFront ヘッダー(CloudFront-Viewer-Country、CloudFront-Viewer-City、CloudFront-Viewer-Postal-Code)を追加し、そのポリシーを利用するようにした。

acccess.log
192.168.xxx.xxx - - [30/Jan/2022:09:23:33 +0000] "GET /index.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36" "123.456.789.123, 987.654.321.987" "JP" "Osaka" "540-0008"

4.accessログフォーマットのLTSV化)

便利そうなので、設定しようと考えている。(これはまだやっていない
https://gomiba.co/archives/2019/07/3065/

5.その他

Ngnixの/etc/nginx/nginx.conf 変更時の反映方法
https://qiita.com/WisteriaWave/items/fa2e7f4442aee497fe46

構文確認
sudo nginx -t
コンフィグ反映(再起動なし)
sudo nginx -s reload

Discussion