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-url
と target-host
に渡せばよい。
$ pwd /home/isucon/isucari $ ./bin/benchmarker -target-url http://public_ip_address -target-host public_ip_address
解説
ベンチマーカの説明から、デフォルトtarget-url
と target-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