Bird
Raised Fist0
Nginxdevops~10 mins

Wildcard and regex server names in Nginx - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Wildcard and regex server names
Start: Receive HTTP request
↓
Check server_name exact match
Yes↓
Serve matched server block
No↓
Check server_name wildcard match
Yes↓
Serve wildcard matched server block
No↓
Check server_name regex match
Yes↓
Serve regex matched server block
No↓
Serve default server block
Nginx checks server names in order: exact match, then wildcard, then regex, and serves the first matching server block.
Execution Sample
Nginx
server {
    server_name example.com *.example.com ~^www\d+\.example\.com$;
    root /var/www/html;
}
This config matches exact 'example.com', any subdomain with wildcard '*.example.com', and regex matching 'www' followed by digits.
Process Table
StepIncoming HostCheck TypeMatch ResultAction Taken
1example.comExact matchMatchedServe example.com server block
2blog.example.comExact matchNo matchCheck wildcard
3blog.example.comWildcard match (*.example.com)MatchedServe wildcard server block
4www12.example.comExact matchNo matchCheck wildcard
5www12.example.comWildcard match (*.example.com)MatchedServe wildcard server block
6www12.example.comRegex match (~^www\d+\.example\.com$)MatchedServe wildcard server block (regex lower priority)
7unknown.comExact matchNo matchCheck wildcard
8unknown.comWildcard matchNo matchCheck regex
9unknown.comRegex matchNo matchServe default server block
💡 Nginx serves the first matching server block based on exact, wildcard, then regex checks.
Status Tracker
VariableStartAfter Step 2After Step 3After Step 6Final
Incoming HostN/Ablog.example.comblog.example.comwww12.example.comunknown.com
Match TypeN/AExact: NoWildcard: YesWildcard: YesNo match
Server Block ServedNoneNoneWildcard *.example.comWildcard *.example.comDefault
Key Moments - 3 Insights
Why does 'www12.example.com' match both wildcard and regex but serve the wildcard block?
Because nginx tests exact, then wildcard, then regex in order, with priorities exact > wildcard > regex. See execution_table rows 5 and 6.
What happens if no server_name matches the incoming host?
Nginx serves the default server block as shown in execution_table row 9.
Does '*.example.com' match 'example.com' itself?
No, wildcard '*.example.com' matches subdomains only, not the root domain. Exact match is needed for 'example.com' (row 1).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does 'blog.example.com' get served and by which match type?
AStep 6, regex match
BStep 2, exact match
CStep 3, wildcard match
DStep 9, default server
💡 Hint
Check rows where Incoming Host is 'blog.example.com' and see the Match Result and Action Taken columns.
According to variable_tracker, what is the Server Block Served after step 6 for 'www12.example.com'?
ARegex ~^www\d+\.example\.com$
BWildcard *.example.com
CExact example.com
DDefault server block
💡 Hint
Look at the 'Server Block Served' row under 'After Step 6' column.
If we remove the regex server block, what would happen to 'www12.example.com' according to the execution flow?
AIt would be served by the wildcard server block
BIt would be served by the exact match server block
CIt would be served by the default server block
DIt would not be served at all
💡 Hint
Check execution_table rows 4 and 5 for 'www12.example.com' and note the regex match presence.
Concept Snapshot
Nginx server_name matching order:
1. Exact names (e.g., example.com)
2. Wildcards (*.example.com matches subdomains)
3. Regex (~^pattern$ matches complex names)
Nginx serves the best matching server block: exact > wildcard > regex.
Default server block serves unmatched hosts.
Full Transcript
This visual execution shows how nginx matches incoming HTTP request hostnames to server blocks using server_name directives. It first checks for exact matches, then wildcard matches, and finally regex matches. The example config includes an exact name 'example.com', a wildcard '*.example.com' for subdomains, and a regex matching 'www' followed by digits. The execution table traces requests like 'example.com', 'blog.example.com', 'www12.example.com', and 'unknown.com' through these checks, showing which server block serves each. Variables track the incoming host, match type, and served block at each step. Key moments clarify why wildcard matches override regex matches and what happens when no match is found. The quiz tests understanding of matching order and outcomes. The snapshot summarizes the matching priority and behavior for quick reference.

Practice

(1/5)
1. What does a wildcard server name like *.example.com match in nginx?
easy
A. Any domain ending with example.com, including example.com itself
B. Only the exact domain example.com
C. Any subdomain of example.com, like blog.example.com or shop.example.com
D. Only domains starting with a star character

Solution

  1. Step 1: Understand wildcard usage in server names

    A wildcard * before a domain matches any subdomain part, but not the root domain itself.
  2. Step 2: Apply to *.example.com

    This matches domains like blog.example.com or shop.example.com, but not example.com alone.
  3. Final Answer:

    Any subdomain of example.com, like blog.example.com or shop.example.com -> Option C
  4. Quick Check:

    Wildcard * matches subdomains only [OK]
Hint: Wildcard * matches subdomains, not the root domain [OK]
Common Mistakes:
  • Thinking wildcard matches the root domain
  • Confusing wildcard with regex syntax
  • Assuming wildcard matches any domain ending
2. Which of the following is the correct syntax to define a regex server name in nginx?
easy
A. server_name /www\d+\.example\.com/;
B. server_name *example.com;
C. server_name ^www\d+\.example\.com$;
D. server_name ~^www\d+\.example\.com$;

Solution

  1. Step 1: Recall regex server name syntax in nginx

    Regex server names start with a tilde ~ followed by the regex pattern.
  2. Step 2: Check each option

    server_name ~^www\d+\.example\.com$; uses ~^www\d+\.example\.com$ which is correct regex syntax. Others either miss the tilde or use invalid delimiters.
  3. Final Answer:

    server_name ~^www\d+\.example\.com$; -> Option D
  4. Quick Check:

    Regex server names start with ~ [OK]
Hint: Regex server names always start with ~ in nginx [OK]
Common Mistakes:
  • Omitting the ~ before regex pattern
  • Using * instead of ~ for regex
  • Using slashes / / as regex delimiters
3. Given this nginx config snippet:
server {
  server_name ~^www\d+\.example\.com$;
  return 200 'Matched regex server name';
}

What will be the response for a request to www12.example.com?
medium
A. Matched regex server name
B. 500 Internal Server Error
C. 404 Not Found
D. Default nginx welcome page

Solution

  1. Step 1: Understand the regex pattern

    The regex ^www\d+\.example\.com$ matches domains starting with 'www' followed by one or more digits, then '.example.com'.
  2. Step 2: Check if 'www12.example.com' matches

    'www12.example.com' matches the pattern because '12' are digits after 'www'.
  3. Final Answer:

    Matched regex server name -> Option A
  4. Quick Check:

    Regex matches www12.example.com [OK]
Hint: Check if domain fits regex pattern exactly [OK]
Common Mistakes:
  • Assuming regex matches partial strings
  • Ignoring start ^ and end $ anchors
  • Confusing regex with wildcard matching
4. You wrote this nginx config:
server {
  server_name ~www\d+\.example\.com$;
  return 200 'Hello';
}

Why is this regex server_name directive incorrect?
medium
A. Missing ^ anchor at start of regex
B. Regex server name must start with ~ and pattern must start with ^
C. Regex pattern missing delimiters like / /
D. Regex server name must start with ~ and pattern must be valid

Solution

  1. Step 1: Check regex server_name syntax

    Regex server names must start with ~ and the pattern should start with ^ to match from the beginning.
  2. Step 2: Identify missing ^ anchor

    The pattern www\d+\.example\.com$ lacks the ^ anchor, causing partial matches rather than full hostname matches.
  3. Final Answer:

    Regex server name must start with ~ and pattern must start with ^ -> Option B
  4. Quick Check:

    Regex patterns need ^ anchor at start [OK]
Hint: Regex patterns should start with ^ for nginx server_name [OK]
Common Mistakes:
  • Omitting ^ anchor in regex pattern
  • Thinking delimiters like / / are needed
  • Ignoring nginx error messages about regex
5. You want nginx to serve requests for any subdomain of example.com except www.example.com. Which server_name config achieves this?
hard
A. server_name ~^(?!www\.)[^.]+\.example\.com$;
B. server_name *.example.com www.example.com;
C. server_name ~^www\d+\.example\.com$;
D. server_name example.com *.example.com;

Solution

  1. Step 1: Understand the requirement

    We want to match any subdomain except 'www.example.com'. This requires a regex with negative lookahead.
  2. Step 2: Analyze options

    server_name ~^(?!www\.)[^.]+\.example\.com$; uses ~^(?!www\.)[^.]+\.example\.com$ which matches any subdomain not starting with 'www.'. Others either include 'www' or don't exclude it.
  3. Final Answer:

    server_name ~^(?!www\.)[^.]+\.example\.com$; -> Option A
  4. Quick Check:

    Negative lookahead excludes www subdomain [OK]
Hint: Use negative lookahead in regex to exclude specific subdomains [OK]
Common Mistakes:
  • Using wildcard that includes www.example.com
  • Not using regex for exclusion
  • Confusing wildcard and regex syntax
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard