Ingress-nginx Annotation Compatibility

Basic concepts

ingress-nginx is a commonly used Ingress Controller in Kubernetes, and defines many annotations to implement various functions beyond the official ingress definition.

Supported ingress-nginx annotations

NametypeSupport (v supports x does not support o partially supports or can be achieved by configuration)
nginx.ingress.kubernetes.io/app-rootstringx
nginx.ingress.kubernetes.io/affinitycookieo ingress does not support. alb rule can configure cookie hash
nginx.ingress.kubernetes.io/use-regexbool
nginx.ingress.kubernetes.io/affinity-mode"balanced" or "persistent"o ingress does not support. alb rule can configure session persistence
nginx.ingress.kubernetes.io/affinity-canary-behavior"sticky" or "legacy"o ingress does not support. alb rule can configure session persistence
nginx.ingress.kubernetes.io/auth-realmstringv auth
nginx.ingress.kubernetes.io/auth-secretstringv auth
nginx.ingress.kubernetes.io/auth-secret-typestringv auth
nginx.ingress.kubernetes.io/auth-type"basic" or "digest"v auth
nginx.ingress.kubernetes.io/auth-tls-secretstringx
nginx.ingress.kubernetes.io/auth-tls-verify-depthnumberx
nginx.ingress.kubernetes.io/auth-tls-verify-clientstringx
nginx.ingress.kubernetes.io/auth-tls-error-pagestringx
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream"true" or "false"x
nginx.ingress.kubernetes.io/auth-tls-match-cnstringx
nginx.ingress.kubernetes.io/auth-urlstringv
nginx.ingress.kubernetes.io/auth-cache-keystringx
nginx.ingress.kubernetes.io/auth-cache-durationstringx
nginx.ingress.kubernetes.io/auth-keepalivenumberx
nginx.ingress.kubernetes.io/auth-keepalive-share-vars"true" or "false"x
nginx.ingress.kubernetes.io/auth-keepalive-requestsnumberx
nginx.ingress.kubernetes.io/auth-keepalive-timeoutnumberx
nginx.ingress.kubernetes.io/auth-proxy-set-headersstringv
nginx.ingress.kubernetes.io/auth-snippetstringx
nginx.ingress.kubernetes.io/enable-global-auth"true" or "false"o auth
nginx.ingress.kubernetes.io/backend-protocolstringv
nginx.ingress.kubernetes.io/canary"true" or "false"x
nginx.ingress.kubernetes.io/canary-by-headerstringx
nginx.ingress.kubernetes.io/canary-by-header-valuestringx
nginx.ingress.kubernetes.io/canary-by-header-patternstringx
nginx.ingress.kubernetes.io/canary-by-cookiestringx
nginx.ingress.kubernetes.io/canary-weightnumberx
nginx.ingress.kubernetes.io/canary-weight-totalnumberx
nginx.ingress.kubernetes.io/client-body-buffer-sizestringx
nginx.ingress.kubernetes.io/configuration-snippetstringx
nginx.ingress.kubernetes.io/custom-http-errors[]intx
nginx.ingress.kubernetes.io/custom-headersstringo
nginx.ingress.kubernetes.io/default-backendstringo can use ingress's default-backend
nginx.ingress.kubernetes.io/enable-cors"true" or "false"v
nginx.ingress.kubernetes.io/cors-allow-originstringv
nginx.ingress.kubernetes.io/cors-allow-methodsstringv
nginx.ingress.kubernetes.io/cors-allow-headersstringv
nginx.ingress.kubernetes.io/cors-expose-headersstringx
nginx.ingress.kubernetes.io/cors-allow-credentials"true" or "false"x
nginx.ingress.kubernetes.io/cors-max-agenumberx
nginx.ingress.kubernetes.io/force-ssl-redirect"true" or "false"v redirect
nginx.ingress.kubernetes.io/from-to-www-redirect"true" or "false"x
nginx.ingress.kubernetes.io/http2-push-preload"true" or "false"x
nginx.ingress.kubernetes.io/limit-connectionsnumberx
nginx.ingress.kubernetes.io/limit-rpsnumberx
nginx.ingress.kubernetes.io/global-rate-limitnumberx
nginx.ingress.kubernetes.io/global-rate-limit-windowdurationx
nginx.ingress.kubernetes.io/global-rate-limit-keystringx
nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrsstringx
nginx.ingress.kubernetes.io/permanent-redirectstringv redirect
nginx.ingress.kubernetes.io/permanent-redirect-codenumberv redirect
nginx.ingress.kubernetes.io/temporal-redirectstringv redirect
nginx.ingress.kubernetes.io/preserve-trailing-slash"true" or "false"x
nginx.ingress.kubernetes.io/proxy-body-sizestringx
nginx.ingress.kubernetes.io/proxy-cookie-domainstringx
nginx.ingress.kubernetes.io/proxy-cookie-pathstringx
nginx.ingress.kubernetes.io/proxy-connect-timeoutnumberv timeout
nginx.ingress.kubernetes.io/proxy-send-timeoutnumberv timeout
nginx.ingress.kubernetes.io/proxy-read-timeoutnumberv timeout
nginx.ingress.kubernetes.io/proxy-next-upstreamstringx
nginx.ingress.kubernetes.io/proxy-next-upstream-timeoutnumberx
nginx.ingress.kubernetes.io/proxy-next-upstream-triesnumberx
nginx.ingress.kubernetes.io/proxy-request-bufferingstringx
nginx.ingress.kubernetes.io/proxy-redirect-fromstringx
nginx.ingress.kubernetes.io/proxy-redirect-tostringx
nginx.ingress.kubernetes.io/proxy-http-version"1.0" or "1.1"x
nginx.ingress.kubernetes.io/proxy-ssl-secretstringx
nginx.ingress.kubernetes.io/proxy-ssl-ciphersstringx
nginx.ingress.kubernetes.io/proxy-ssl-namestringx
nginx.ingress.kubernetes.io/proxy-ssl-protocolsstringx
nginx.ingress.kubernetes.io/proxy-ssl-verifystringx
nginx.ingress.kubernetes.io/proxy-ssl-verify-depthnumberx
nginx.ingress.kubernetes.io/proxy-ssl-server-namestringx
nginx.ingress.kubernetes.io/enable-rewrite-log"true" or "false"x
nginx.ingress.kubernetes.io/rewrite-targetURIv
nginx.ingress.kubernetes.io/satisfystringx
nginx.ingress.kubernetes.io/server-aliasstringx
nginx.ingress.kubernetes.io/server-snippetstringx
nginx.ingress.kubernetes.io/service-upstream"true" or "false"x
nginx.ingress.kubernetes.io/session-cookie-change-on-failure"true" or "false"x
nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none"true" or "false"x
nginx.ingress.kubernetes.io/session-cookie-domainstringx
nginx.ingress.kubernetes.io/session-cookie-expiresstringx
nginx.ingress.kubernetes.io/session-cookie-max-agestringx
nginx.ingress.kubernetes.io/session-cookie-namestringx
nginx.ingress.kubernetes.io/session-cookie-pathstringx
nginx.ingress.kubernetes.io/session-cookie-samesitestringx
nginx.ingress.kubernetes.io/session-cookie-securestringx
nginx.ingress.kubernetes.io/ssl-redirect"true" or "false"v
nginx.ingress.kubernetes.io/ssl-passthrough"true" or "false"x
nginx.ingress.kubernetes.io/stream-snippetstringx
nginx.ingress.kubernetes.io/upstream-hash-bystringx
nginx.ingress.kubernetes.io/x-forwarded-prefixstringx
nginx.ingress.kubernetes.io/load-balancestringx
nginx.ingress.kubernetes.io/upstream-vhoststringv
nginx.ingress.kubernetes.io/denylist-source-rangeCIDRo can achieve similar effect through modsecurity
nginx.ingress.kubernetes.io/whitelist-source-rangeCIDRo can achieve similar effect through modsecurity
nginx.ingress.kubernetes.io/proxy-bufferingstringx
nginx.ingress.kubernetes.io/proxy-buffers-numbernumberx
nginx.ingress.kubernetes.io/proxy-buffer-sizestringx
nginx.ingress.kubernetes.io/proxy-max-temp-file-sizestringx
nginx.ingress.kubernetes.io/ssl-ciphersstringx
nginx.ingress.kubernetes.io/ssl-prefer-server-ciphers"true" or "false"x
nginx.ingress.kubernetes.io/connection-proxy-headerstringx
nginx.ingress.kubernetes.io/enable-access-log"true" or "false"o default enable access_log, format is fixed
nginx.ingress.kubernetes.io/enable-opentelemetry"true" or "false"v otel
nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span"true" or "false"v otel
nginx.ingress.kubernetes.io/enable-modsecurityboolv modsecurity
nginx.ingress.kubernetes.io/enable-owasp-core-rulesboolv modsecurity
nginx.ingress.kubernetes.io/modsecurity-transaction-idstringv modsecurity
nginx.ingress.kubernetes.io/modsecurity-snippetstringv modsecurity
nginx.ingress.kubernetes.io/mirror-request-bodystringx
nginx.ingress.kubernetes.io/mirror-targetstringx
nginx.ingress.kubernetes.io/mirror-hoststringx