🦍

KongのNginxの設定を変更してみる

2022/11/30に公開

はじめに

OSSのKongは世界で最も人気のあるAPI Gatewayで、認証認可や流量制御などプラグインを有効化するだけで用意することができます。KongですがNginx(Openresty)をベースに作られており、kongの設定値を介してNginxの設定値を変更することもできます。

この記事ではNginx設定変更についての備忘録になります。
主に以下の公式ドキュメントの内容になります。
https://docs.konghq.com/gateway/latest/reference/configuration/#nginx-injected-directives-section

Kongの設定値の指定方法

kongの設定はKONG_の接頭辞の環境変数か/etc/kong/kong.confファイルで指定することができます。

設定ファイルを用いる場合

/etc/kong/kong.conf or /etc/kong.confをデフォルトで読み込む設定になっています。
変更する場合はkong start --conf /path/to/kong.confで指定します。
設定例は/etc/kong/kong.conf.defaultに記載があります。

(例) kong.confでの設定定義

plugins = bundled
database = off
log_level = notice

Dockerfileでコピー

FROM kong:2.8.1-alpine
...
COPY kong.conf /etc/kong/kong.conf

環境変数を用いる場合

KONG_の接頭辞がついた環境変数をkongの設定値として認識します。

(例) Dockerfileでの環境変数定義

FROM kong:2.8.1-alpine
...
ENV KONG_PLUGINS bundled
ENV KONG_DATABASE off
ENV KONG_LOG_LEVEL notice

Nginxの設定値の指定方法

KongはNginxをベースに動いており、Nginxのパラメータ設定も環境変数または設定ファイルで行うことができます。

設定ファイルを用いる場合

nginx_<namespace>_<directive>を指定することで[prefix (default to /usr/local/kong/)]/nginx.confに挿入されます。

(例)httpブロックの設定を挿入したい場合

  1. kong.confに記載する

    nginx_http_client_body_buffer_size=15m
    nginx_http_proxy_buffering=on
    nginx_http_proxy_buffers=8k
    nginx_http_proxy_buffer_size=8k
    
  2. httpブロックに挿入される

/usr/local/kong/nginx-kong.confを確認

  ```
  http {
    ...
    # injected nginx_http_* directives
    client_body_buffer_size 150m;
    ...
  }
  ```

他も同様の仕組みで挿入される

prefix Target
nginx_main_<directive> root in nginx.conf
nginx_events_<directive> events {} block
nginx_http_<directive> http {} block
nginx_proxy_<directive> server {} block
nginx_upstream_<directive> upstream {} block

設定ファイルを用いる場合

上記にKONG_の接頭辞をつけた環境変数を設定します。

(例) Dockerfileでの環境変数定義

FROM kong:2.8.1-alpine
...
ENV KONG_NGINX_HTTP_CLIENT_BODY_BUFFER_SIZE 15m
ENV KONG_NGINX_HTTP_PROXY_BUFFERING on
ENV KONG_NGINX_HTTP_PROXY_BUFFERS 8k
ENV KONG_NGINX_HTTP_PROXY_BUFFER_SIZE 8k

Discussion