やりたいこと
- 引き続き、infratasterでhttp://endpoent-xxx.reviewapps.speee.jp のroutingがテストできるようにする。
現状整理
# curl curl -H "Host: endpoint-1.reviewapps.speee.jp" http://127.0.01 http://127.0.0.1:80
# container log nginx-proxy | nginx.1 | endpoint-1.reviewapps.speee.jp 172.21.0.1 - - [13/Jul/2017:01:11:01 +0000] "GET / HTTP/1.1" 200 20 "-" "curl/7.43.0"
問題ありそうな場所
確認方法
- revieee_nginx_containerのキャッシュが消せていない問題
- キャッシュを物理的に削除してみる。
1pomo 10:40 - 11:05
ちゃんとcacheが消せていない可能性を潰す。
% docker exec -it revieee_nginx_container /bin/bash root@06ec8eb57c9f:/# rm /var/tmp/localmemcache/*.lmc
mysql> select * from endpoints; +------+-----------+------+---------+ | id | ip | port | task_id | +------+-----------+------+---------+ | 1 | 127.0.0.1 | 3000 | 1 | +------+-----------+------+---------+ 1 row in set (0.01 sec)
これで、アクセスしたら、http://127.0.0.1:3000が返ってくるはず。
% curl -H "Host: endpoint-1.reviewapps.speee.jp" http://127.0.01 http://127.0.0.1:3000 http://127.0.0.1:3000
つまり、cacheがちゃんと消せてないということが分かった。 もう一度、revieee/clear時のエラーログを確認する。
nginx-proxy | nginx.1 | 2017/07/13 01:49:04 [error] 39#39: *7 upstream prematurely closed connection while reading response header from upstream, client: 172.21.0.1, server: *.reviewapps.speee.jp, request: "GET /revieee/clear HTTP/1.1", upstream: "http://172.21.0.4:80/revieee/clear", host: "endpoint-1.reviewapps.speee.jp" nginx-proxy | nginx.1 | endpoint-1.reviewapps.speee.jp 172.21.0.1 - - [13/Jul/2017:01:49:04 +0000] "GET /revieee/clear HTTP/1.1" 502 173 "-" "curl/7.43.0"
今からは上のエラーの原因調査のみに集中する
upstream prematurely closed connection while reading response header from upstream
エラーログはこれ。upstreamのresponse headerを読み込んでいる最中に、upstreamが早まってconnectionをclosedにしたぞと。どういうことよ…
revieee_nginx側のlogが欲しい。なので、revieee_nginx側のlog設定を見直す。 なので、下記の設定を nginxのcontainerに追記する。
access_log /var/log/nginx/access.log;
nginx 再起動
docker exec revieee_nginx_container /usr/local/nginx/sbin/nginx -s reload
root@06ec8eb57c9f:/var/log# tail -f nginx/access.log 172.21.0.3 - - [13/Jul/2017:02:16:07 +0000] "GET / HTTP/1.1" 200 22 "-" "curl/7.43.0" 172.21.0.3 - - [13/Jul/2017:02:16:10 +0000] "GET /revieee/clear HTTP/1.1" 000 0 "-" "curl/7.43.0"
logが流れている….どうやら、このnginx containerまでは到達した模様. もうちょっとloggerの精度を高めたいなぁ。
2pomo 11:20 - 11:45
わざわざcontainer入らないと見れないのツライからもっと調査する。
https://docs.docker.com/engine/admin/logging/view_container_logs/
を熟読。access_logを↓のように設定する。
access_log /dev/stdout;
すると、accessしたときに、下記のようなlogが流れた。
revieee_nginx_container | 172.21.0.3 - - [13/Jul/2017:02:39:09 +0000] "GET /sample HTTP/1.1" 200 32 "-" "curl/7.43.0" nginx-proxy | nginx.1 | sample.reviewapps.speee.jp 172.21.0.1 - - [13/Jul/2017:02:39:09 +0000] "GET /sample HTTP/1.1" 200 32 "-" "curl/7.43.0"
大体目的どおり。