How to get substring of a string with nginx

The map directive allows you to define a new variable based on the value of another. You can use a regular expression to capture the last four characters.

The map block needs to be defined within the http block (outside of the server block) so the name for the new variable must be globally unique.

See this document for details.

For example:

map $cookie_MY_COOKIE $my_value {
    default                    "";
    "~^.{60}(?<suffix>.{4})$"  $suffix;
}

server {
    ...
}

The regular expression will only match values which are exactly 64 characters long, otherwise an empty string is returned.

We use a named capture as numeric captures will be overwritten each time Nginx evaluates a regular expression elsewhere in your configuration.

Use the variable $my_value to obtain the last four characters from $cookie_MY_COOKIE.