All Products
Search
Document Center

Container Service for Kubernetes:Kamus konfigurasi Nginx Ingress

Last Updated:Jun 16, 2026

Konfigurasikan NGINX Ingress secara global melalui ConfigMap nginx-configuration atau per Ingress melalui anotasi.

Lihat dokumentasi ConfigMap NGINX Ingress dan dokumentasi anotasi NGINX Ingress.

ConfigMap

ConfigMap nginx-configuration menetapkan nilai default global untuk semua Ingress yang dikelola oleh controller NGINX Ingress.

Edit ConfigMap

kubectl edit cm -n kube-system nginx-configuration

Konfigurasi default

ConfigMap berikut menunjukkan nilai default ACK. Bidang yang tidak tercantum mewarisi nilai default upstream ingress-nginx.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: <namespace>    # Default: 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"

Deskripsi bidang

Bidang Default Deskripsi
log-format-upstream (lihat di atas) Format log untuk permintaan upstream. Jika Anda mengubah bidang ini, perbarui juga AliyunLogConfig kube-system/k8s-nginx-ingress dan format pengumpulan log di Simple Log Service (SLS). Lihat Diagnosis log akses controller NGINX Ingress di Simple Log Service.
proxy-body-size 20m Ukuran maksimum badan permintaan klien. Memetakan ke client_max_body_size.
proxy-connect-timeout 10 Timeout (detik) untuk membuat koneksi dengan server proxy. Maksimum: 75. Untuk gRPC, atur juga grpc_connect_timeout. Lihat proxy_connect_timeout.
max-worker-connections 65536 Koneksi simultan maksimum per proses worker. Atur ke 0 untuk menggunakan nilai max-worker-open-files sebagai gantinya.
enable-underscores-in-headers true Apakah mengizinkan garis bawah (_) dalam nama header permintaan.
reuse-port true Membuat socket listening terpisah per worker menggunakan SO_REUSEPORT, mendistribusikan koneksi masuk ke seluruh worker.
worker-cpu-affinity auto Mengikat setiap proses worker ke core CPU yang tersedia. Berguna untuk beban kerja berkinerja-tinggi.
server-tokens false Jika true, menyertakan versi NGINX dalam header respons Server dan halaman error. Atur ke false untuk menyembunyikan informasi versi.
ssl-redirect false Jika true, mengalihkan HTTP ke HTTPS (301) secara global untuk semua server yang memiliki sertifikat TLS.
allow-backend-server-header true Jika true, meneruskan header Server dari backend alih-alih string generik NGINX.
ignore-invalid-headers true Apakah mengabaikan bidang header yang tidak valid dalam permintaan.
generate-request-id true Jika true, menghasilkan nilai acak X-Request-ID untuk permintaan yang belum menyertakan header ini.
upstream-keepalive-timeout 900 (ACK) / 60 (open source) Timeout idle (detik) untuk koneksi keep-alive ke server upstream. Memetakan ke direktif NGINX keepalive_timeout.

Anotasi

Tambahkan anotasi ke sumber daya Ingress individual untuk mengganti atau memperluas pengaturan ConfigMap global.

Lihat dokumentasi anotasi NGINX Ingress.

Load balancing

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/load-balance round_robin | ewma Algoritma load balancing untuk layanan backend. round_robin (default) cocok untuk sebagian besar beban kerja. ewma (Peak Exponential Weighted Moving Average) lebih baik untuk aplikasi yang sensitif terhadap latensi.
nginx.ingress.kubernetes.io/upstream-hash-by string Mengaktifkan consistent hashing. Nilainya adalah variabel kunci hash. Contoh: $request_uri, $request_uri$host, ${request_uri}-text-value. Menambah atau menghapus node hanya memigrasikan subset entri rute.

Contoh: consistent hashing berdasarkan URI permintaan

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>
Untuk kluster Kubernetes versi sebelum 1.22, gunakan apiVersion: networking.k8s.io/v1beta1 dan bidang serviceName/servicePort di bawah backend.

Afinitas cookie

Anotasi Tipe Default Deskripsi
nginx.ingress.kubernetes.io/affinity cookie Tipe afinitas. Hanya cookie yang didukung.
nginx.ingress.kubernetes.io/affinity-mode balanced | persistent balanced balanced mendistribusikan permintaan ke seluruh instans. persistent selalu mengarahkan klien ke instans backend yang sama, memastikan konsistensi sesi.
nginx.ingress.kubernetes.io/session-cookie-name string Nama cookie yang digunakan sebagai kunci hash untuk routing sesi.
nginx.ingress.kubernetes.io/session-cookie-path string / Atribut path yang diatur pada cookie sesi. Tidak mendukung ekspresi reguler ketika nginx.ingress.kubernetes.io/use-regex bernilai true.
nginx.ingress.kubernetes.io/session-cookie-max-age integer (detik) Max-Age pada cookie sesi (detik).
nginx.ingress.kubernetes.io/session-cookie-expires integer (detik) Masa berlaku cookie (detik). Mengatur atribut Expires.

Contoh: afinitas sesi berbasis cookie

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

Pengalihan

Anotasi Tipe Default Deskripsi
nginx.ingress.kubernetes.io/ssl-redirect "true" | "false" Mengalihkan HTTP ke HTTPS untuk Ingress ini jika memiliki sertifikat TLS. Lihat Pengalihan HTTP ke HTTPS.
nginx.ingress.kubernetes.io/force-ssl-redirect "true" | "false" "false" Memaksa pengalihan HTTP ke HTTPS bahkan tanpa sertifikat TLS.
nginx.ingress.kubernetes.io/permanent-redirect URL URL tujuan untuk pengalihan permanen. Harus mencakup skema (http:// atau https://).
nginx.ingress.kubernetes.io/permanent-redirect-code integer 301 Kode status HTTP untuk pengalihan permanen.
nginx.ingress.kubernetes.io/temporal-redirect URL URL tujuan untuk pengalihan sementara. Harus mencakup skema (http:// atau https://).
nginx.ingress.kubernetes.io/app-root path Mengalihkan permintaan ke / ke path root aplikasi yang ditentukan.

Contoh: pengalihan permanen dari `foo.com` ke `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

Menulis ulang

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/rewrite-target string Path tujuan untuk penulisan ulang. Mendukung grup tangkapan. Lihat Konfigurasi pengalihan URL.
nginx.ingress.kubernetes.io/upstream-vhost string Menulis ulang header Host yang dikirim ke layanan upstream.

Contoh: menulis ulang header `Host` menjadi `test.com` untuk permintaan ke `example.com/test`

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

Pembatasan kecepatan

Batasi laju permintaan dan koneksi bersamaan per IP klien untuk melindungi layanan backend dari lonjakan lalu lintas.

Anotasi Tipe Default Deskripsi
nginx.ingress.kubernetes.io/limit-connections integer Koneksi bersamaan maksimum per IP. Permintaan berlebih menerima respons 503.
nginx.ingress.kubernetes.io/limit-rate integer (KB) Data maksimum yang ditransmisikan per koneksi per detik (KB). Atur ke 0 untuk menonaktifkan. Memerlukan proxy buffering diaktifkan.
nginx.ingress.kubernetes.io/limit-rps integer Permintaan maksimum per detik per alamat IP. Permintaan yang melebihi batas burst (laju × limit-burst-multiplier) mengembalikan error limit-req-status-code (503 secara default).
nginx.ingress.kubernetes.io/limit-rpm integer Permintaan maksimum per menit per alamat IP. Memiliki perilaku burst yang sama seperti limit-rps.
nginx.ingress.kubernetes.io/limit-burst-multiplier integer 5 Pengali batas laju burst.
nginx.ingress.kubernetes.io/limit-whitelist Daftar Blok CIDR Blok CIDR yang dipisahkan koma dan dikecualikan dari pembatasan kecepatan.

Contoh: pembatasan laju dengan daftar putih 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

Fallback

Arahkan lalu lintas ke layanan cadangan saat backend utama tidak tersedia.

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/default-backend string Layanan fallback saat tidak ada node backend yang tersedia. Konfigurasikan secara global melalui halaman Add-ons di Konsol ACK.
nginx.ingress.kubernetes.io/custom-http-errors Kode status HTTP Bekerja dengan default-backend. NGINX meneruskan permintaan ke layanan fallback saat backend mengembalikan kode status yang terdaftar. Path ditulis ulang menjadi /. Mengganti pengaturan ConfigMap custom-http-errors global.

Rilis canary

Terapkan rilis canary dan penyebaran biru-hijau. Lihat Gunakan controller NGINX Ingress untuk menerapkan rilis canary dan penyebaran biru-hijau.

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/canary "true" | "false" Menentukan apakah akan mengaktifkan rilis canary.
nginx.ingress.kubernetes.io/canary-by-header string Kunci header untuk pemisahan lalu lintas.
nginx.ingress.kubernetes.io/canary-by-header-value string Nilai pencocokan eksak untuk kunci header. Mengarahkan permintaan yang cocok ke canary.
nginx.ingress.kubernetes.io/canary-by-header-pattern regex Pencocokan ekspresi reguler untuk nilai header.
nginx.ingress.kubernetes.io/canary-by-cookie string Kunci cookie yang digunakan untuk pemisahan lalu lintas.
nginx.ingress.kubernetes.io/canary-weight integer Persentase lalu lintas yang diarahkan ke canary (0–canary-weight-total).
nginx.ingress.kubernetes.io/canary-weight-total integer Penyebut bobot untuk canary-weight.

Timeout

Pengaturan timeout global

Edit ConfigMap nginx-configuration untuk mengatur timeout secara global:

kubectl edit cm -n kube-system nginx-configuration
Bidang Default Deskripsi
proxy-connect-timeout 5s Timeout koneksi proxy. Maksimum: 75s.
proxy-read-timeout 60s Timeout antara pembacaan proxy berturut-turut (bukan waktu respons total).
proxy-send-timeout 60s Timeout antara penulisan proxy berturut-turut (bukan waktu transmisi total).
proxy-stream-next-upstream-timeout 600s Waktu maksimum untuk meneruskan koneksi ke server upstream berikutnya. Atur ke 0 untuk tanpa batas.
proxy-stream-timeout 600s Timeout idle pada koneksi klien atau proxy. Ditutup jika tidak ada data yang ditransfer.
upstream-keepalive-timeout 900s (ACK) / 60s (open source) Timeout idle untuk koneksi keep-alive ke server upstream.
worker-shutdown-timeout 240s Timeout shutdown graceful.
proxy-protocol-header-timeout 5s Timeout untuk menerima header protokol PROXY. Mencegah penanganan passthrough TLS terblokir pada koneksi rusak.
ssl-session-timeout 10m Masa berlaku cache sesi SSL. Setiap entri menggunakan sekitar 0,25 MB.
client-body-timeout 60s Timeout untuk membaca badan permintaan klien.
client-header-timeout 60s Timeout untuk membaca header permintaan klien.

Pengaturan timeout per Ingress

Ganti timeout global untuk Ingress tertentu dengan anotasi berikut:

Anotasi Deskripsi
nginx.ingress.kubernetes.io/proxy-connect-timeout Timeout koneksi proxy.
nginx.ingress.kubernetes.io/proxy-send-timeout Timeout pengiriman proxy.
nginx.ingress.kubernetes.io/proxy-read-timeout Timeout pembacaan proxy.
nginx.ingress.kubernetes.io/proxy-request-buffering Mode buffering permintaan. on: buffer seluruh permintaan sebelum diteruskan (permintaan chunked HTTP/1.1 selalu dibuffer). off: streaming data permintaan langsung; tidak ada retry saat terjadi error transmisi.

CORS

Aktifkan Berbagi Sumber Daya Lintas Asal (CORS) untuk permintaan browser. Lihat Konfigurasi CORS pada NGINX Ingress.

Anotasi Deskripsi
nginx.ingress.kubernetes.io/enable-cors Mengaktifkan CORS untuk Ingress ini.
nginx.ingress.kubernetes.io/cors-allow-origin Origin yang diizinkan untuk permintaan CORS.
nginx.ingress.kubernetes.io/cors-allow-methods Metode permintaan yang diizinkan, termasuk GET, POST, dan PUT.
nginx.ingress.kubernetes.io/cors-allow-headers Header permintaan yang diizinkan.
nginx.ingress.kubernetes.io/cors-expose-headers Header respons yang diekspos ke browser.
nginx.ingress.kubernetes.io/cors-allow-credentials Apakah mengizinkan kredensial (cookie, header otorisasi) dalam permintaan CORS.
nginx.ingress.kubernetes.io/cors-max-age Durasi cache preflight CORS (detik).

Kebijakan retry

Anotasi Default Deskripsi
nginx.ingress.kubernetes.io/proxy-next-upstream-tries 3 Jumlah retry saat kondisi terpenuhi.
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout Timeout (detik) untuk seluruh urutan retry. Tidak ada default (tidak terbatas).
nginx.ingress.kubernetes.io/proxy-next-upstream Kondisi retry. Pisahkan beberapa nilai dengan spasi. Nilai yang valid: error (kegagalan koneksi), timeout (timeout), invalid_response (kode status tidak valid), http_500, http_502, http_503, http_504, http_403, http_404, http_429, off (nonaktifkan retry).

Kontrol akses berbasis alamat IP

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/whitelist-source-range Daftar Blok CIDR Daftar putih IP. Hanya alamat IP atau blok CIDR yang tercantum yang diizinkan. Dipisahkan koma.
nginx.ingress.kubernetes.io/denylist-source-range Daftar Blok CIDR Daftar hitam IP. Alamat IP atau blok CIDR yang tercantum ditolak. Dipisahkan koma.

Contoh: izinkan hanya alamat IP tertentu

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

Untuk menerapkan secara global, atur whitelist-source-range di ConfigMap nginx-configuration.

Mirror lalu lintas

Duplikasi permintaan produksi ke lingkungan shadow untuk pengujian tanpa memengaruhi lalu lintas langsung. Lihat Gunakan controller Ingress untuk mencerminkan lalu lintas jaringan.

Anotasi Tipe Deskripsi
nginx.ingress.kubernetes.io/mirror-target URL Tujuan mirror. Menerima alamat IP Layanan atau URL eksternal. Gunakan $request_uri untuk menambahkan URI permintaan asli. Contoh: https://test.env.com/$request_uri.
nginx.ingress.kubernetes.io/mirror-request-body "true" | "false" Apakah akan mencerminkan badan permintaan.
nginx.ingress.kubernetes.io/mirror-host string Host yang dikirim bersama permintaan yang dicerminkan.

Proteksi keamanan

Konfigurasikan enkripsi TLS antara klien dan controller NGINX Ingress, serta antara controller dan layanan backend. Lihat Enkripsi controller NGINX Ingress.

Enkripsi klien-ke-gerbang

Anotasi Ruang Lingkup Deskripsi
nginx.ingress.kubernetes.io/ssl-cipher Domain Paket sandi TLS (dipisahkan koma). Hanya berlaku untuk jabat tangan TLS 1.0–1.2. Paket sandi default: ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-SHA, ECDHE-RSA-AES128-SHA, AES128-GCM-SHA256, AES128-SHA, ECDHE-ECDSA-AES256-GCM-SHA384, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-SHA, ECDHE-RSA-AES256-SHA, AES256-GCM-SHA384, AES256-SHA.
nginx.ingress.kubernetes.io/auth-tls-secret Domain Secret sertifikat CA untuk memverifikasi sertifikat klien dalam mTLS. Harus mencakup file ca.crt dengan rantai CA lengkap.

Enkripsi gerbang-ke-backend

Anotasi Ruang Lingkup Deskripsi
nginx.ingress.kubernetes.io/proxy-ssl-secret Layanan Secret sertifikat klien yang disajikan ke backend. Harus dalam format PEM dengan tls.crt (sertifikat klien), tls.key (kunci privat), dan ca.crt (sertifikat CA tepercaya). Tentukan sebagai "namespace/secretName".
nginx.ingress.kubernetes.io/proxy-ssl-name Layanan Nilai Indikasi Nama Server (SNI) untuk proses jabat tangan TLS dengan backend.
nginx.ingress.kubernetes.io/proxy-ssl-server-name Layanan Mengaktifkan atau menonaktifkan SNI untuk proses jabat tangan TLS dengan backend.

Otentikasi keamanan

Batasi akses dengan Otentikasi Dasar. Hanya permintaan yang terotentikasi yang mencapai layanan backend.

Anotasi Ruang Lingkup Deskripsi
nginx.ingress.kubernetes.io/auth-type Ingress Tipe otentikasi. Atur ke basic.
nginx.ingress.kubernetes.io/auth-secret Ingress Nama Secret kredensial. Format: namespace/secretName.
nginx.ingress.kubernetes.io/auth-secret-type Ingress Format data Secret. auth-file: kunci auth memiliki entri username:password yang dipisahkan baris baru. auth-map: kunci adalah username, nilai adalah password.
nginx.ingress.kubernetes.io/auth-realm Ingress Realm otentikasi yang ditampilkan ke klien saat diminta memasukkan kredensial.

Siapkan Otentikasi Dasar

  1. Buat file password dengan htpasswd:

    htpasswd -c auth joker

    Verifikasi file tersebut:

    cat auth
    # Expected output: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/
  2. Buat Secret dari file password:

    kubectl create secret generic basic-auth --from-file=auth
  3. Tambahkan anotasi ke Ingress Anda:

    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

Langkah selanjutnya