Bird
Raised Fist0
Nginxdevops~10 mins

Regex match (~, ~*) in Nginx - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to match URLs ending with .jpg using a case-sensitive regex.

Nginx
location ~ [1] { }
Drag options to blanks, or click blank then click option'
A\.jpg$
B^jpg$
Cjpg$
D\.JPG$
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting to escape the dot in the regex.
Using case-insensitive operator (~*) instead of case-sensitive (~).
2fill in blank
medium

Complete the code to match URLs ending with .PNG or .png using a case-insensitive regex.

Nginx
location ~* [1] { }
Drag options to blanks, or click blank then click option'
A\.PNG$
Bpng$
C\.png$
D^png$
Attempts:
3 left
💡 Hint
Common Mistakes
Not escaping the dot.
Using ~ instead of ~* for case-insensitive matching.
3fill in blank
hard

Fix the error in the code to correctly match URLs starting with /images/ using a case-sensitive regex.

Nginx
location ~ [1] { }
Drag options to blanks, or click blank then click option'
Aimages/
B^/images/
C^images$
D/images/
Attempts:
3 left
💡 Hint
Common Mistakes
Omitting the caret ^ causes matching anywhere in the string.
Missing the leading slash in the pattern.
4fill in blank
hard

Fill both blanks to match URLs ending with .css or .js using a case-insensitive regex.

Nginx
location ~* [1] { } # matches files ending with [2]
Drag options to blanks, or click blank then click option'
A\.(css|js)$
B\.(jpg|png)$
C.css$
D.js$
Attempts:
3 left
💡 Hint
Common Mistakes
Using separate patterns for .css and .js instead of combined.
Not escaping the dot.
5fill in blank
hard

Fill all three blanks to match URLs starting with /api/ followed by digits, case-sensitive.

Nginx
location ~ [1][2][3] { }
Drag options to blanks, or click blank then click option'
A^/api/
B\d+
C$
D[a-z]+
Attempts:
3 left
💡 Hint
Common Mistakes
Omitting anchors causes partial matches.
Using wrong character classes for digits.

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