Skip to content


# Rewrite

This example demonstrates how to use the Rewrite annotations

## Prerequisites

You will need to make sure your Ingress targets exactly one Ingress controller by specifying the ingress.class annotation, and that you have an ingress controller running in your cluster.

## Deployment

Rewriting can be controlled using the following annotations:

Name | Description | Values
--- | --- | ---
nginx.ingress.kubernetes.io/rewrite-target | Target URI where the traffic must be redirected | string
nginx.ingress.kubernetes.io/add-base-url | indicates if is required to add a base tag in the head of the responses from the upstream servers | bool
nginx.ingress.kubernetes.io/base-url-scheme | Override for the scheme passed to the base tag | string
nginx.ingress.kubernetes.io/ssl-redirect | Indicates if the location section is accessible SSL only (defaults to True when Ingress contains a Certificate) | bool
nginx.ingress.kubernetes.io/force-ssl-redirect | Forces the redirection to HTTPS even if the Ingress is not TLS Enabled | bool
nginx.ingress.kubernetes.io/app-root | Defines the Application Root that the Controller must redirect if it's in '/' context | string

## Validation

### Rewrite Target

Create an Ingress rule with a rewrite annotation:

    $ echo "
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
      name: rewrite
      namespace: default
    spec:
      rules:
      - host: rewrite.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /something
    " | kubectl create -f -

Check the rewrite is working

    $ curl -v http://172.17.4.99/something -H 'Host: rewrite.bar.com'
    *   Trying 172.17.4.99...
    * Connected to 172.17.4.99 (172.17.4.99) port 80 (#0)
    > GET /something HTTP/1.1
    > Host: rewrite.bar.com
    > User-Agent: curl/7.43.0
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Server: nginx/1.11.0
    < Date: Tue, 31 May 2016 16:07:31 GMT
    < Content-Type: text/plain
    < Transfer-Encoding: chunked
    < Connection: keep-alive
    <
    CLIENT VALUES:
    client_address=10.2.56.9
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://rewrite.bar.com:8080/

    SERVER VALUES:
    server_version=nginx: 1.9.11 - lua: 10001

    HEADERS RECEIVED:
    accept=*/*
    connection=close
    host=rewrite.bar.com
    user-agent=curl/7.43.0
    x-forwarded-for=10.2.56.1
    x-forwarded-host=rewrite.bar.com
    x-forwarded-port=80
    x-forwarded-proto=http
    x-real-ip=10.2.56.1
    BODY:
    * Connection #0 to host 172.17.4.99 left intact
    -no body in request-

### App Root

Create an Ingress rule with a app-root annotation:

    $ echo "
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/app-root: /app1
      name: approot
      namespace: default
    spec:
      rules:
      - host: approot.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /
    " | kubectl create -f -

Check the rewrite is working

    $ curl -I -k http://approot.bar.com/
    HTTP/1.1 302 Moved Temporarily
    Server: nginx/1.11.10
    Date: Mon, 13 Mar 2017 14:57:15 GMT
    Content-Type: text/html
    Content-Length: 162
    Location: http://stickyingress.example.com/app1
    Connection: keep-alive