diff --git a/e2e-tests/index.html b/e2e-tests/index.html index cbdedb767..b02c13e33 100644 --- a/e2e-tests/index.html +++ b/e2e-tests/index.html @@ -1,7 +1,7 @@ - E2e tests - Ingress-Nginx Controller
Skip to content

e2e test suite for Ingress NGINX Controller

[Admission] admission controller

affinitymode

server-alias

app-root

auth-*

auth-tls-*

backend-protocol

canary-*

client-body-buffer-size

connection-proxy-header

cors-*

custom-http-errors

default-backend

disable-access-log disable-http-access-log disable-stream-access-log

force-ssl-redirect

from-to-www-redirect

annotation-global-rate-limit

backend-protocol - GRPC

http2-push-preload

denylist-source-range

whitelist-source-range

Annotation - limit-connections

limit-rate

enable-access-log enable-rewrite-log

mirror-*

modsecurity owasp

preserve-trailing-slash

proxy-*

proxy-ssl-*

permanent-redirect permanent-redirect-code

rewrite-target use-regex enable-rewrite-log

satisfy

server-snippet

service-upstream

configuration-snippet

ssl-ciphers

stream-snippet

upstream-hash-by-*

upstream-vhost

x-forwarded-prefix

denylist-source-range

rewrite-target use-regex enable-rewrite-log

auth-*

canary-*

Debug CLI

[Default Backend] custom service

[Default Backend]

[Default Backend] SSL

[Default Backend] change default settings

[Endpointslices] long service name

[TopologyHints] topology aware routing

[Setting]

[Setting]

[Shutdown] Grace period shutdown

[Shutdown] ingress controller

[Shutdown] Graceful shutdown with pending request

[Ingress] DeepInspection

single ingress - multiple hosts

[Ingress] [PathType] exact

[Ingress] [PathType] mix Exact and Prefix paths

[Ingress] [PathType] prefix checks

[Ingress] definition without host

[Memory Leak] Dynamic Certificates

[Load Balancer] load-balance

[Load Balancer] EWMA

[Load Balancer] round-robin

[Lua] dynamic certificates

[Lua] dynamic configuration

[metrics] exported prometheus metrics

nginx-configuration

[Security] request smuggling

[Service] backend status code 503

[Service] Type ExternalName

[Service] Nil Service Backend

access-log

Bad annotation values

brotli

Configmap change

add-headers

[SSL] [Flag] default-ssl-certificate

[Flag] disable-catch-all

[Flag] disable-service-external-name

[Flag] disable-sync-events

enable-real-ip

use-forwarded-headers

Geoip2

[Security] block-*

[Security] global-auth-url

global-options

settings-global-rate-limit

gzip

hash size

[Flag] ingress-class

keep-alive keep-alive-requests

Configmap - limit-rate

[Flag] custom HTTP and HTTPS ports

log-format-*

[Lua] lua-shared-dicts

main-snippet

[Security] modsecurity-snippet

enable-multi-accept

[Flag] watch namespace selector

[Security] no-auth-locations

Add no tls redirect locations

OCSP

Configure Opentelemetry

Configure OpenTracing

plugins

[Security] Pod Security Policies

[Security] Pod Security Policies with volumes

proxy-connect-timeout

Dynamic $proxy_host

proxy-next-upstream

use-proxy-protocol

proxy-read-timeout

proxy-send-timeout

reuse-port

configmap server-snippet

server-tokens

ssl-ciphers

With enable-ssl-passthrough enabled

configmap stream-snippet

[SSL] TLS protocols, ciphers and headers)

[SSL] redirect to HTTPS

[SSL] secret update

[Status] status update

[TCP] tcp-services

Skip to content

Exposing FastCGI Servers

This feature has been removed from Ingress NGINX

People willing to use fastcgi servers, should create an NGINX + FastCGI service and expose this service via Ingress NGINX.

We recommend using images like cgr.dev/chainguard/nginx:latest and expose your fast_cgi application as another container on this Pod.

Skip to content

Exposing FastCGI Servers

FastCGI is a binary protocol for interfacing interactive programs with a web server. [...] (It's) aim is to reduce the overhead related to interfacing between web server and CGI programs, allowing a server to handle more web page requests per unit of time.

— Wikipedia

The ingress-nginx ingress controller can be used to directly expose FastCGI servers. Enabling FastCGI in your Ingress only requires setting the backend-protocol annotation to FCGI, and with a couple more annotations you can customize the way ingress-nginx handles the communication with your FastCGI server.

Example Objects to Expose a FastCGI Pod

The Pod example object below exposes port 9000, which is the conventional FastCGI port.

apiVersion: v1
+kind: Pod
+metadata:
+  name: example-app
+labels:
+  app: example-app
+spec:
+  containers:
+  - name: example-app
+    image: example-app:1.0
+    ports:
+    - containerPort: 9000
+      name: fastcgi
+

The Service object example below matches port 9000 from the Pod object above.

apiVersion: v1
+kind: Service
+metadata:
+  name: example-service
+spec:
+  selector:
+    app: example-app
+  ports:
+  - port: 9000
+    targetPort: 9000
+    name: fastcgi
+

And the Ingress and ConfigMap objects below demonstrates the supported FastCGI specific annotations (NGINX actually has 50 FastCGI directives, all of which have not been exposed in the ingress yet), and matches the service example-service, and the port named fastcgi from above. The ConfigMap must be created first for the Ingress Controller to be able to find it when the Ingress object is created, otherwise you will need to restart the Ingress Controller pods.

# The ConfigMap MUST be created first for the ingress controller to be able to
+# find it when the Ingress object is created.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: example-cm
+data:
+  SCRIPT_FILENAME: "/example/index.php"
+
+---
+
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  annotations:
+    nginx.ingress.kubernetes.io/backend-protocol: "FCGI"
+    nginx.ingress.kubernetes.io/fastcgi-index: "index.php"
+    nginx.ingress.kubernetes.io/fastcgi-params-configmap: "example-cm"
+  name: example-app
+spec:
+  ingressClassName: nginx
+  rules:
+  - host: app.example.com
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: example-service
+            port:
+              name: fastcgi
+

FastCGI Ingress Annotations

To enable FastCGI, the nginx.ingress.kubernetes.io/backend-protocol annotation needs to be set to FCGI, which overrides the default HTTP value.

nginx.ingress.kubernetes.io/backend-protocol: "FCGI"

This enables the FastCGI mode for all paths defined in the Ingress object

The nginx.ingress.kubernetes.io/fastcgi-index Annotation

To specify an index file, the fastcgi-index annotation value can optionally be set. In the example below, the value is set to index.php. This annotation corresponds to the NGINX fastcgi_index directive.

nginx.ingress.kubernetes.io/fastcgi-index: "index.php"

The nginx.ingress.kubernetes.io/fastcgi-params-configmap Annotation

To specify NGINX fastcgi_param directives, the fastcgi-params-configmap annotation is used, which in turn must lead to a ConfigMap object containing the NGINX fastcgi_param directives as key/values.

nginx.ingress.kubernetes.io/fastcgi-params-configmap: "example-configmap"

And the ConfigMap object to specify the SCRIPT_FILENAME and HTTP_PROXY NGINX's fastcgi_param directives will look like the following:

apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: example-configmap
+data:
+  SCRIPT_FILENAME: "/example/index.php"
+  HTTP_PROXY: ""
+
Using the namespace/ prefix is also supported, for example:

nginx.ingress.kubernetes.io/fastcgi-params-configmap: "example-namespace/example-configmap"