すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:NGINX Ingress 構成辞書

最終更新日:Mar 27, 2026

NGINX Ingress の動作は、グローバル設定用の nginx-configuration ConfigMap と、リソースレベルでのオーバーライド用の Ingress ごとのアノテーションという 2 つのメカニズムを通じて構成します。

詳細については、「NGINX Ingress ConfigMap ドキュメント」または「NGINX Ingress アノテーション ドキュメント」をご参照ください。

ConfigMap

nginx-configuration ConfigMap は、NGINX Ingress コントローラーによって管理されるすべての Ingress のグローバルデフォルトを制御します。

ConfigMap の編集

kubectl edit cm -n kube-system nginx-configuration

デフォルト構成

以下の ConfigMap は ACK のデフォルトを反映しています。ここに記載されていないフィールドは、上流の ingress-nginx のデフォルトを継承します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: <namespace>    # デフォルト: kube-system
  labels:
    app: ingress-nginx
data:
  log-format-upstream: '$remote_addr - [$remote_addr] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id $host [$proxy_alternative_upstream_name]'
  proxy-body-size: 20m
  proxy-connect-timeout: "10"
  max-worker-connections: "65536"
  enable-underscores-in-headers: "true"
  reuse-port: "true"
  worker-cpu-affinity: "auto"
  server-tokens: "false"
  ssl-redirect: "false"
  allow-backend-server-header: "true"
  ignore-invalid-headers: "true"
  generate-request-id: "true"
  upstream-keepalive-timeout: "900"

フィールドの説明

フィールド デフォルト 説明
log-format-upstream (上記参照) アップストリームリクエストのログフォーマット。このフィールドを変更する場合は、kube-system/k8s-nginx-ingress AliyunLogConfig および Simple Log Service のログ収集フォーマットも更新してください。詳細については、「Simple Log Service での NGINX Ingress コントローラーのアクセスログの診断」をご参照ください。
proxy-body-size 20m クライアントリクエストボディの最大サイズです。client_max_body_size に対応します。
proxy-connect-timeout 10 プロキシサーバーとの接続確立タイムアウト(秒単位)です。最大値は 75 です。gRPC 接続の場合、grpc_connect_timeout も設定してください。「proxy_connect_timeout」をご参照ください。
max-worker-connections 65536 ワーカープロセス あたりの最大同時接続数です。0 を設定すると、代わりに max-worker-open-files の値が使用されます。
enable-underscores-in-headers true リクエストヘッダー名にアンダースコア (_) を含めることを許可するかどうかを指定します。
reuse-port true SO_REUSEPORT ソケットオプションを使用して、ワーカープロセスごとに個別のリスニングソケットを作成し、OS が受信接続を各ワーカー間で分散できるようにします。
worker-cpu-affinity auto 各ワーカープロセスを利用可能な CPU コアに自動的にバインドします。パフォーマンス専有型ワークロードに役立ちます。
server-tokens false true の場合、Server レスポンスヘッダーやエラーページに NGINX のバージョン情報を含めます。false を設定すると、バージョン情報の公開を抑制します。
ssl-redirect false true の場合、TLS 証明書を持つすべてのサーバーに対して HTTP から HTTPS へのグローバルなリダイレクト(301)を実行します。
allow-backend-server-header true true の場合、バックエンドサービスから送信された Server ヘッダーを置き換えずにそのまま通過させます(汎用的な NGINX 文字列への置き換えを行いません)。
ignore-invalid-headers true リクエスト内の無効なヘッダーフィールドを無視するかどうかを指定します。
generate-request-id true truetrue の場合、X-Request-ID ヘッダーがまだ含まれていないリクエストに対して、ランダムな 値を生成します。
upstream-keepalive-timeout 900 (ACK) / 60 (オープンソース) アップストリームサーバーへのキープアライブ接続のアイドルタイムアウト(秒単位)です。NGINX の keepalive_timeout ディレクティブに対応します。

アノテーション

個々の Ingress リソースにアノテーションを追加して、グローバルな ConfigMap 設定をオーバーライドまたは拡張できます。アノテーションは、設定された Ingress リソースにのみ適用されます。

全一覧については、「NGINX Ingress アノテーションドキュメント」をご参照ください。

ロードバランシング

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/load-balance round_robin | ewma バックエンドサービスのロードバランシングアルゴリズムです。round_robin(デフォルト)はほとんどのワークロードに適しています。ewma(ピーク指数加重移動平均)は遅延の影響を受けやすいアプリケーションに適しています。
nginx.ingress.kubernetes.io/upstream-hash-by string 一貫したハッシュを有効にします。値はハッシュキーとして使用される変数です。例:$request_uri$request_uri$host${request_uri}-text-value。一貫したハッシュは循環ハッシュ空間を使用するため、ノードの追加または削除時にルートの一部のみを移行する必要があります。

例:リクエスト URI による一貫したハッシュ

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
  ingressClassName: nginx
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: <your-service-name>
                port:
                  number: <your-service-port>
Kubernetes バージョン 1.22 より前のクラスターでは、apiVersion: networking.k8s.io/v1beta1 を使用し、backend 配下に serviceName/servicePort フィールドを指定してください。

Cookie アフィニティ

アノテーション タイプ デフォルト 説明
nginx.ingress.kubernetes.io/affinity cookie アフィニティタイプです。cookie のみがサポートされています。
nginx.ingress.kubernetes.io/affinity-mode balanced | persistent balanced balanced はインスタンス間でリクエストを分散します。persistent はクライアントを常に同じバックエンドインスタンスにルーティングし、セッションの一貫性を保証します。
nginx.ingress.kubernetes.io/session-cookie-name string セッションルーティングのハッシュキーとして使用されるクッキー名です。
nginx.ingress.kubernetes.io/session-cookie-path string / セッションクッキーに設定されるパス属性です。nginx.ingress.kubernetes.io/use-regextrue の場合、正規表現はサポートされません。
nginx.ingress.kubernetes.io/session-cookie-max-age integer (秒) Max-Age 属性(秒単位)です。
nginx.ingress.kubernetes.io/session-cookie-expires integer (秒) クッキー作成時からの有効期限(秒単位)です。Expires 属性を設定します。

例:クッキーに基づくセッション保持

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
  ingressClassName: nginx
  rules:
    - host: stickyingress.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: http-svc
                port:
                  number: 80

リダイレクト

アノテーション タイプ デフォルト 説明
nginx.ingress.kubernetes.io/ssl-redirect "true" | "false" このIngressにTLS証明書がある場合、HTTPをHTTPSにリダイレクトします。HTTP-to-HTTPS リダイレクト」をご参照ください。
nginx.ingress.kubernetes.io/force-ssl-redirect "true" | "false" "false" TLS 証明書が設定されているかどうかに関係なく、HTTP から HTTPS へのリダイレクトを強制します。
nginx.ingress.kubernetes.io/permanent-redirect URL 恒久的なリダイレクトの送信先 URL です。スキーム(http:// または https://)を含める必要があります。
nginx.ingress.kubernetes.io/permanent-redirect-code integer 301 恒久的なリダイレクトの HTTP ステータスコードです。
nginx.ingress.kubernetes.io/temporal-redirect URL 一時的なリダイレクトの送信先 URL です。スキーム(http:// または https://)を含める必要があります。
nginx.ingress.kubernetes.io/app-root path / へのリクエストを指定されたアプリケーションルートパスにリダイレクトします。

例:`foo.com` から `bar.com` への恒久的なリダイレクト

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/permanent-redirect: "https://bar.com"
spec:
  ingressClassName: nginx
  rules:
    - host: foo.com
      http:
        paths:
          - path: "/"
            pathType: ImplementationSpecific
            backend:
              service:
                name: httpbin
                port:
                  number: 8000

書き換え

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/rewrite-target string 書き換えの宛先パスです。キャプチャグループをサポートしています。詳細については、「URL リダイレクトを設定する」をご参照ください。
nginx.ingress.kubernetes.io/upstream-vhost string アップストリームサービスに送信される Host ヘッダーを書き換えます。

例:`example.com/test` へのリクエストの `Host` ヘッダーを `test.com` に書き換える

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
spec:
  ingressClassName: nginx
  rules:
    - host: example.com
      http:
        paths:
          - path: /test
            pathType: ImplementationSpecific
            backend:
              service:
                name: demo-service
                port:
                  number: 80

速度制限

速度制限アノテーションを使用して、クライアント IP アドレスごとのリクエストレートおよび同時接続数を制限し、トラフィックスパイクからバックエンドサービスを保護します。

アノテーション タイプ デフォルト 説明
nginx.ingress.kubernetes.io/limit-connections integer IP アドレスあたりの最大同時接続数です。この制限を超えたリクエストは 503 応答を受け取ります。
nginx.ingress.kubernetes.io/limit-rate integer (KB) 接続あたり 1 秒間に転送されるデータの最大量(KB 単位)です。0 を設定すると無効になります。有効にするにはプロキシバッファリングを有効にする必要があります。
nginx.ingress.kubernetes.io/limit-rps integer IP アドレスあたりの最大リクエスト数(秒単位)です。バースト制限(レート × limit-burst-multiplier)を超えたリクエストは、limit-req-status-code エラー(デフォルトでは 503)を返します。
nginx.ingress.kubernetes.io/limit-rpm integer IP アドレスあたりの最大リクエスト数(分単位)です。limit-rps と同じバースト動作をします。
nginx.ingress.kubernetes.io/limit-burst-multiplier integer 5 バーストレート制限を計算するための乗数です。
nginx.ingress.kubernetes.io/limit-whitelist CIDR リスト 速度制限から除外される CIDR ブロックのカンマ区切りリストです。

例:IP ホワイトリスト付きのレート制限

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/limit-rate: "100K"
    nginx.ingress.kubernetes.io/limit-rps: "1"
    nginx.ingress.kubernetes.io/limit-rpm: "30"
    nginx.ingress.kubernetes.io/limit-whitelist: "10.1.10.100"
spec:
  ingressClassName: nginx
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-svc
                port:
                  number: 80

フォールバック

フォールバックアノテーションを使用して、プライマリバックエンドが利用できない場合にトラフィックをバックアップサービスにルーティングします。

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/default-backend string バックエンドノードが利用できない場合にリクエストを受信するフォールバックサービスです。ACK コンソールの アドオン ページからグローバルに構成できます。
nginx.ingress.kubernetes.io/custom-http-errors HTTP ステータスコード default-backend と連携して動作します。バックエンドが指定されたステータスコードのいずれかを返す場合、NGINX はリクエストをフォールバックサービスに転送します。転送時にはリクエストパスが / に書き換えられます(上流の ingress-nginx の動作と一致します)。この Ingress 内のパスについて、グローバルな custom-http-errors ConfigMap 設定をオーバーライドします。

カナリアリリース

カナリアアノテーションを使用して、カナリアリリースおよびブルーグリーンリリースを実装する。詳細については、「NGINX Ingress コントローラーを使用してカナリアリリースおよびブルーグリーンリリースを実装する」をご参照ください。

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/canary "true" | "false" カナリアリリース機能を有効にするかどうかを指定します。
nginx.ingress.kubernetes.io/canary-by-header string トラフィック分割に使用するリクエストヘッダーのキーです。
nginx.ingress.kubernetes.io/canary-by-header-value string ヘッダーキーの完全一致値です。一致するリクエストをカナリアにルーティングします。
nginx.ingress.kubernetes.io/canary-by-header-pattern regex ヘッダー値の正規表現マッチです。
nginx.ingress.kubernetes.io/canary-by-cookie string トラフィック分割に使用するクッキーのキーです。
nginx.ingress.kubernetes.io/canary-weight integer カナリアにルーティングされるトラフィックの割合(0~canary-weight-total)です。
nginx.ingress.kubernetes.io/canary-weight-total integer canary-weight の分母として使用される総重量です。

タイムアウト

グローバルタイムアウト設定

グローバルにタイムアウトを設定するには、nginx-configuration ConfigMap を編集します:

kubectl edit cm -n kube-system nginx-configuration
フィールド デフォルト 説明
proxy-connect-timeout 5s プロキシサーバーとの接続確立タイムアウトです。最大値は 75s です。
proxy-read-timeout 60s プロキシサーバーからの 2 回の連続読み取り間のタイムアウトです(合計応答時間ではありません)。
proxy-send-timeout 60s プロキシサーバーへの 2 回の連続書き込み間のタイムアウトです(合計リクエスト送信時間ではありません)。
proxy-stream-next-upstream-timeout 600s 次のアップストリームサーバーへの接続引き渡しに許容される最大時間です。0 を設定すると制限なしになります。
proxy-stream-timeout 600s クライアントまたはプロキシ接続における連続した読み取りまたは書き込み間のタイムアウトです。この期間内にデータ転送がない場合、接続は閉じられます。
upstream-keepalive-timeout 900s (ACK) / 60s (オープンソース) アップストリームサーバーへのキープアライブ接続のアイドルタイムアウトです。
worker-shutdown-timeout 240s グレースフルシャットダウンのタイムアウトです。
proxy-protocol-header-timeout 5s PROXY プロトコルヘッダーの受信タイムアウトです。これにより、壊れた接続上で TLS パススルーハンドラーが無限に待機することを防ぎます。
ssl-session-timeout 10m セッションキャッシュ内の SSL セッションパラメーターの有効期間です。各セッションキャッシュエントリーは約 0.25 MB を使用します。
client-body-timeout 60s クライアントリクエストボディの読み取りタイムアウトです。
client-header-timeout 60s クライアントリクエストヘッダーの読み取りタイムアウトです。

Ingress ごとのタイムアウト設定

特定の Ingress に対してグローバルタイムアウトをオーバーライドするには、以下のアノテーションを使用します:

アノテーション 説明
nginx.ingress.kubernetes.io/proxy-connect-timeout プロキシサーバーとの接続確立タイムアウトです。
nginx.ingress.kubernetes.io/proxy-send-timeout プロキシサーバーへのデータ送信タイムアウトです。
nginx.ingress.kubernetes.io/proxy-read-timeout プロキシサーバーからのデータ読み取りタイムアウトです。
nginx.ingress.kubernetes.io/proxy-request-buffering リクエストバッファリングモードです。on:転送前にリクエスト全体をバッファリングします(HTTP/1.1 のチャンク化リクエストは常にバッファリングされます)。off:リクエストデータを直接ストリーミングします。送信エラー時のリトライは行われません。

CORS

オリジン間リソース共有 (CORS) を設定して、ブラウザクライアントが異なるオリジンからリソースにアクセスできるようにします。 詳細については、「NGINX Ingress で CORS を設定する」をご参照ください。

アノテーション 説明
nginx.ingress.kubernetes.io/enable-cors この Ingress の CORS を有効にします。
nginx.ingress.kubernetes.io/cors-allow-origin CORS で許可されるサードパーティサイトを指定します。
nginx.ingress.kubernetes.io/cors-allow-methods CORS で許可されるリクエストメソッドを指定します。許可されるリクエストメソッドには GET、POST、PUT が含まれます。
nginx.ingress.kubernetes.io/cors-allow-headers 許可されるリクエストヘッダーです。
nginx.ingress.kubernetes.io/cors-expose-headers ブラウザに公開されるレスポンスヘッダーです。
nginx.ingress.kubernetes.io/cors-allow-credentials CORS リクエストで認証情報(クッキー、認証ヘッダー)を許可するかどうかを指定します。
nginx.ingress.kubernetes.io/cors-max-age ブラウザが CORS プリフライト結果をキャッシュできる期間(秒単位)です。

リトライポリシー

アノテーション デフォルト 説明
nginx.ingress.kubernetes.io/proxy-next-upstream-tries 3 リトライ条件が満たされた場合のリトライ回数です。
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout リトライシーケンス全体のタイムアウト(秒単位)です。デフォルト値はありません(無制限)。
nginx.ingress.kubernetes.io/proxy-next-upstream リトライ条件です。複数の値をスペースで区切って指定します。有効な値:error(接続失敗)、timeout(タイムアウト)、invalid_response(無効なステータスコード)、http_500http_502http_503http_504http_403http_404http_429off(リトライを無効化)。

IP アドレスベースのアクセス制御

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/whitelist-source-range CIDR リスト IP ホワイトリストです。リストに記載された IP アドレスまたは CIDR ブロックからのリクエストのみを許可します。複数のエントリーはカンマで区切ります。
nginx.ingress.kubernetes.io/denylist-source-range CIDR リスト IP ブロックリストです。リストに記載された IP アドレスまたは CIDR ブロックからのリクエストを拒否します。複数のエントリーはカンマで区切ります。

例:特定の IP アドレスのみを許可

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/whitelist-source-range: "10.1.10.2"
spec:
  ingressClassName: nginx
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-svc
                port:
                  number: 80

IP ホワイトリストをグローバルに適用するには、nginx-configuration ConfigMap を編集し、whitelist-source-range を設定してください。

トラフィックミラーリング

トラフィックミラーリングでは、本番環境のリクエストをシャドウ環境に複製し、実際のトラフィックに影響を与えることなく新しいバージョンまたは構成をテストできます。詳細な手順については、「Ingress コントローラーを使用してネットワークトラフィックをミラーリングする」をご参照ください。

アノテーション タイプ 説明
nginx.ingress.kubernetes.io/mirror-target URL ミラー送信先です。Service IP アドレスまたは外部 URL を受け入れます。元のリクエスト URI を追加するには $request_uri を使用します。例:https://test.env.com/$request_uri
nginx.ingress.kubernetes.io/mirror-request-body "true" | "false" リクエストボディをミラーするかどうかを指定します。
nginx.ingress.kubernetes.io/mirror-host string Host ヘッダーは、ミラーされたリクエストとともに送信されます。

セキュリティ保護

TLS を設定して、クライアントと NGINX Ingress コントローラー間、およびコントローラーとバックエンドサービス間の通信を暗号化します。詳細については、「NGINX Ingress コントローラーの暗号化」をご参照ください。

クライアントからゲートウェイへの暗号化

アノテーション スコープ 説明
nginx.ingress.kubernetes.io/ssl-cipher ドメイン TLS 暗号スイート(カンマ区切り)です。TLS 1.0~1.2 ハンドシェイク時のみ有効になります。デフォルトの暗号スイート:ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-RSA-AES128-GCM-SHA256ECDHE-ECDSA-AES128-SHAECDHE-RSA-AES128-SHAAES128-GCM-SHA256AES128-SHAECDHE-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES256-GCM-SHA384ECDHE-ECDSA-AES256-SHAECDHE-RSA-AES256-SHAAES256-GCM-SHA384AES256-SHA
nginx.ingress.kubernetes.io/auth-tls-secret ドメイン 相互 TLS (mTLS) ハンドシェイク中にクライアント証明書を検証するために使用される認証局 (CA) 証明書を含むシークレットです。シークレットには、完全な CA チェーンを含む ca.crt ファイルが含まれている必要があります。

ゲートウェイからバックエンドへの暗号化

アノテーション スコープ 説明
nginx.ingress.kubernetes.io/proxy-ssl-secret サービス ゲートウェイがバックエンドサービスに提示するクライアント証明書を含むシークレットです。Privacy Enhanced Mail (PEM) 形式で、tls.crt(クライアント証明書)、tls.key(秘密鍵)、および ca.crt(信頼された CA 証明書)を含んでいる必要があります。"namespace/secretName" として指定します。
nginx.ingress.kubernetes.io/proxy-ssl-name サービス バックエンドとの TLS ハンドシェイク時に送信されるサーバ名表示 (SNI) 値です。
nginx.ingress.kubernetes.io/proxy-ssl-server-name サービス バックエンドとの TLS ハンドシェイク時に SNI を有効または無効にします。

セキュリティ認証

ベーシック認証を使用してアプリケーションへのアクセスを制限します。有効な認証情報を持つリクエストのみがバックエンドサービスに転送されます。

アノテーション スコープ 説明
nginx.ingress.kubernetes.io/auth-type Ingress 認証タイプです。basic に設定します。
nginx.ingress.kubernetes.io/auth-secret Ingress namespace/secretName 形式で、認証情報を含むシークレットの名前です。
nginx.ingress.kubernetes.io/auth-secret-type Ingress シークレットデータの形式です。auth-fileauth キーに改行区切りの username:password エントリーが含まれます。auth-map:各キーがユーザー名で、対応する値がパスワードです。
nginx.ingress.kubernetes.io/auth-realm Ingress 認証情報の入力を求める際にクライアントに表示される認証レルムです。

ベーシック認証の設定

  1. htpasswd を使用してパスワードファイルを生成します:

    htpasswd -c auth joker

    ファイルを確認します:

    cat auth
    # 期待される出力: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/
  2. パスワードファイルからシークレットを作成します:

    kubectl create secret generic basic-auth --from-file=auth
  3. Ingress にアノテーションを追加します:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-nginx
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/auth-type: basic
        nginx.ingress.kubernetes.io/auth-secret: basic-auth
    spec:
      ingressClassName: nginx
      rules:
        - host: example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: backend-svc
                    port:
                      number: 80

次のステップ