Bird
Raised Fist0
Nginxdevops~5 mins

Regex match (~, ~*) in Nginx - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does the ~ operator do in nginx configuration?
The ~ operator tells nginx to perform a case-sensitive regular expression match on the requested URI.
Click to reveal answer
beginner
What is the difference between ~ and ~* in nginx?
~ is for case-sensitive regex matching, while ~* is for case-insensitive regex matching.
Click to reveal answer
intermediate
How would nginx treat the location block location ~* \.jpg$?
It matches any URI ending with '.jpg' or '.JPG' or any case variation, because ~* makes the regex case-insensitive.
Click to reveal answer
intermediate
Why use regex matching in nginx locations instead of prefix matching?
Regex matching allows flexible and precise matching patterns, like matching file extensions or specific URI patterns that prefix matching can't handle.
Click to reveal answer
advanced
What happens if multiple location blocks match a request in nginx?
Nginx first checks prefix matches, then regex matches in order. The first matching regex location is used. Regex locations have higher priority than prefix matches if they match.
Click to reveal answer
Which nginx operator performs a case-insensitive regex match?
A^~
B~*
C=
D~
What does the ~ operator in nginx do?
APrefix match
BCase-insensitive regex match
CExact match
DCase-sensitive regex match
Which location block matches URIs ending with '.PNG' or '.png'?
Alocation ~* \.png$
Blocation ~ \.png$
Clocation = \.png$
Dlocation ^~ \.png$
If both prefix and regex locations match a request, which does nginx choose?
ARegex location
BPrefix location
CThe longer prefix location
DThe first defined location
What symbol is used for exact match in nginx location blocks?
A~*
B~
C=
D^~
Explain the difference between ~ and ~* operators in nginx location blocks.
Think about how uppercase and lowercase letters are treated.
You got /4 concepts.
    Describe how nginx decides which location block to use when multiple blocks match a request.
    Consider the matching order and priority rules.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the ~ operator mean in an nginx location block?
      easy
      A. It matches any request regardless of URL.
      B. It performs a case-insensitive regular expression match.
      C. It performs a case-sensitive regular expression match.
      D. It matches the exact string only.

      Solution

      1. Step 1: Understand nginx regex operators

        The ~ operator in nginx is used for regex matching that is case-sensitive.
      2. Step 2: Differentiate from ~*

        The ~* operator is for case-insensitive regex matching, so it is different from ~.
      3. Final Answer:

        It performs a case-sensitive regular expression match. -> Option C
      4. Quick Check:

        ~ = case-sensitive regex match [OK]
      Hint: Remember: ~ is case-sensitive, ~* is case-insensitive [OK]
      Common Mistakes:
      • Confusing ~ with ~* for case sensitivity
      • Thinking ~ matches exact strings only
      • Assuming ~ matches all requests
      2. Which of the following is the correct syntax to match URLs case-insensitively using regex in nginx?
      easy
      A. location ~* /images/ { }
      B. location = /images/ { }
      C. location ~ /images/ { }
      D. location /images/ { }

      Solution

      1. Step 1: Identify case-insensitive regex syntax

        In nginx, ~* is used for case-insensitive regex matching.
      2. Step 2: Check other options

        ~ is case-sensitive, = is exact match, and no operator means prefix match.
      3. Final Answer:

        location ~* /images/ { } -> Option A
      4. Quick Check:

        Case-insensitive regex = ~* [OK]
      Hint: Use ~* for case-insensitive regex in nginx location [OK]
      Common Mistakes:
      • Using ~ instead of ~* for case-insensitive matching
      • Confusing exact match (=) with regex
      • Omitting regex operator for regex matching
      3. Given this nginx config snippet:
      location ~* \.jpg$ {
        return 200 'Image file matched';
      }

      What will be the response for a request to /photos/Sunset.JPG?
      medium
      A. 404 Not Found
      B. 500 Internal Server Error
      C. 200 with empty body
      D. 200 with 'Image file matched'

      Solution

      1. Step 1: Analyze the regex and operator

        The ~* operator means case-insensitive regex match. The regex \.jpg$ matches strings ending with '.jpg' ignoring case.
      2. Step 2: Check the request URL

        The request is /photos/Sunset.JPG, which ends with '.JPG' (uppercase). Case-insensitive match succeeds.
      3. Final Answer:

        200 with 'Image file matched' -> Option D
      4. Quick Check:

        Case-insensitive regex matches .JPG [OK]
      Hint: ~* ignores case, so .JPG matches \.jpg$ regex [OK]
      Common Mistakes:
      • Assuming regex is case-sensitive with ~*
      • Ignoring the $ end anchor in regex
      • Confusing response codes returned
      4. Identify the error in this nginx location block:
      location ~* /images/(.*\.png$ {
        proxy_pass http://backend;
      }
      medium
      A. Missing closing parenthesis in regex
      B. Using ~* instead of ~ for case-sensitive match
      C. proxy_pass URL is invalid
      D. location block missing curly braces

      Solution

      1. Step 1: Check regex syntax

        The regex /images/(.*\.png$ has an opening parenthesis but no closing parenthesis.
      2. Step 2: Validate other parts

        The ~* operator is valid for case-insensitive match, proxy_pass URL looks valid, and curly braces are present.
      3. Final Answer:

        Missing closing parenthesis in regex -> Option A
      4. Quick Check:

        Regex parentheses must be balanced [OK]
      Hint: Count parentheses in regex to avoid syntax errors [OK]
      Common Mistakes:
      • Forgetting to close parentheses in regex
      • Confusing ~ and ~* usage
      • Ignoring syntax errors in regex patterns
      5. You want to serve all URLs ending with .css or .CSS using a regex match in nginx. Which location block correctly matches both cases efficiently?
      hard
      A. location ~ \.css$ { }
      B. location ~* \.css$ { }
      C. location ~ \.css$|\.CSS$ { }
      D. location ~* \.css$|\.CSS$ { }

      Solution

      1. Step 1: Understand case-insensitive matching

        Using ~* makes the regex case-insensitive, so it matches both '.css' and '.CSS'.
      2. Step 2: Evaluate other options

        location ~ \.css$ { } uses case-sensitive ~, so it misses '.CSS'. Options C and D have incorrect regex syntax with unescaped pipes and redundant patterns.
      3. Final Answer:

        location ~* \.css$ { } -> Option B
      4. Quick Check:

        Use ~* for simple case-insensitive regex [OK]
      Hint: Use ~* with simple regex to match case-insensitive extensions [OK]
      Common Mistakes:
      • Using ~ and missing uppercase matches
      • Trying to match cases with complex regex instead of ~*
      • Incorrect escaping of regex special characters