LoginSignup
0
2

More than 3 years have passed since last update.

nginxコンテナの設定を変更する

Posted at

はじめに

初心者向け。nginxのコンテナの設定変更をしてみようの巻!

設定ファイル

参考: 【Qiita】nginxについてまとめ(導入編)

上記参考の記事によると、nginxの設定ファイルは、非コンテナの場合は /usr/local/etc/nginx/ にあるが、コンテナ(DockerHubの nginx:1.18 の場合)では見つからない。

こういう時は docker exec -it nginx bash でコンテナに潜り込んで確認してみよう。

コンテナの場合は、/etc/nginx 配下に nginx.conf があった。
server 設定については、このファイル内で include /etc/nginx/conf.d/*.conf; が参照されていて、デフォルトでは /etc/nginx/conf.d/default.conf の中で設定されているようだ。

静的コンテンツをキャッシュする

公式サイトを参考にしながら超粗く設定すると、以下のような感じになる。
nginxのデフォルトコンテナでは /data/nginx/cache がないので、コンテナ起動する場合はDockerfileの中で作っておこう。

/etc/nginx/nginx.conf
http {
(中略)
    proxy_cache_path /data/nginx/cache keys_zone=cachezone:10m max_size=200m;

    include /etc/nginx/conf.d/*.conf;
(中略)
}
/etc/nginx/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        proxy_cache cachezone;
        proxy_pass http://127.0.0.1:8080;
        proxy_cache_key $host$uri$is_args$args;
        proxy_cache_valid 200 10m;
    }
}

server {
    listen       8080;
    listen  [::]:8080;
    server_name  localhost2;
(以下略)
}

だいたい公式サイトの通りなのだが、デフォルトでは全部キャッシュするよ、と言っておきながら、

        proxy_cache_key $host$uri$is_args$args;

を設定しておかないと必ずキャッシュミスになるので注意が必要。

キャッシュヒットしているかの確認

ログを見るのが一番手っ取り早い。

/etc/nginx/nginx.conf
http {
(中略)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status" "$server_port"';
(中略)
}

な感じで、"$upstream_cache_status""$server_port" をログ出力しておくようにしよう。

キャッシュなし版では

XXX.XXX.XXX.XXX - - [24/Oct/2020:12:32:01 +0000] "GET /xxxxx/ HTTP/1.1" 200 4668 "-" "python-requests/2.24.0" "-" "-" "80"

でプロキシ機能のログが出ていないことがわかる。
一方で、キャッシュあり版では、

127.0.0.1 - - [24/Oct/2020:12:56:34 +0000] "GET / HTTP/1.0" 200 956 "-" "curl/7.61.1" "-" "-" "8080"
XXX.XXX.XXX.XXX - - [24/Oct/2020:12:56:34 +0000] "GET / HTTP/1.1" 200 956 "-" "curl/7.61.1" "-" "MISS" "80"
XXX.XXX.XXX.XXX - - [24/Oct/2020:12:56:54 +0000] "GET / HTTP/1.1" 200 956 "-" "curl/7.61.1" "-" "HIT" "80"

といった感じで、内部通信のログと、キャッシュヒット有無が表示されるプロキシ機能のログが出力される。

性能差はどれくらいか?

キャッシュなし

キャッシュなし_number_of_users_1603540075.png
キャッシュなし_total_requests_per_second_1603540075.png
キャッシュなし_response_times_(ms)_1603540075.png

まだまだ余裕そうな雰囲気だが、性能ツール側を止めてしまったので一旦ここまで。

キャッシュあり

キャッシュあり_number_of_users_1603536854.png
キャッシュあり_total_requests_per_second_1603536854.png
キャッシュあり_response_times_(ms)_1603536854.png

あれ?キャッシュなしの方が性能が良いように見える。
たぶん、今回の負荷モデルは「それほど大きくないコンテンツに集中的にアクセス」なので、そもそもOSのバッファキャッシュに乗ってしまって、かえってキャッシュありの方がオーバーヘッドになっているのではないかという気がする。
厳密に差分を確認するには、キャッシュの恩恵を得られるような「大きいコンテンツに分散アクセス」しないと分からないかもしれない。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2