ISUCON9にて、nginxのaccess_log Directives設定が反映されない際の対応

予選用イメージファイルを利用したインスタンスの起動を参考に、AWSに環境構築した。その後、ベンチマークを流したがaccess_log の出力先にログが吐かれない。

上記を問題を解決する方法がわかったので、ブログに残しておく。

解決策

80番ポートをlistenさせる。

$ cat /etc/nginx/sites-enabled/isucari.conf

server {
    access_log  /var/log/nginx/isucon.log;
    listen 80; # 追加
    listen 443 ssl;
    server_name isucon9.catatsuy.org;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8000;
    }
}

その後、EC2のパブリック IPv4 アドレス を benchmarkerの target-urltarget-host に渡せばよい。

$ pwd
/home/isucon/isucari
$ ./bin/benchmarker  -target-url http://public_ip_address -target-host public_ip_address

解説

ベンチマーカの説明から、デフォルトtarget-urltarget-host は以下の通りである。

  -target-host string
        target host (default "isucon9.catatsuy.org")
  -target-url string
        target url (default "http://127.0.0.1:8000")

デフォルトでは、アプリケーションに対して直接ベンチマーカを実行するため、nginxを経由しない。そのため、/var/log/nginx/isucon.log にログが吐き出さない。

解決策は、nginxを経由するようにベンチマーカにオプションを渡すことだ。

解決策に至るまでのプロセス

ブラウザからアクセスすると、アクセスログにログを吐く。ベンチマーカを実行するとログを吐かない。

このことから、ベンチマーカはNginxにリクエストしていない可能性があると考えた。仮説を元に、ドキュメントを読み解決に至った。

アドバイスほしいところ

以下のように、https に対してベンチマーカを実行したかったが、証明書問題を解決できなかった。 https に対して、ベンチマークを実行する方法を知っていればコメントもらいたい。

$ ./bin/benchmarker  -target-url https://public_ip_address -target-host public_ip_address