Bird
Raised Fist0
Nginxdevops~5 mins

server_name directive in Nginx - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: server_name directive
O(1)
Understanding Time Complexity

We want to understand the time complexity of matching a server name in nginx.

How does nginx check the server_name directive when many names are configured?

Scenario Under Consideration

Analyze the time complexity of the following nginx configuration snippet.

server {
    listen 80;
    server_name example.com www.example.com api.example.com;

    location / {
        proxy_pass http://backend;
    }
}

This snippet defines a server block with three server names that nginx will match against incoming requests.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: nginx uses a hash table to look up the requested hostname against the configured server_names.
  • How many times: Constant time operation regardless of list size.
How Execution Grows With Input

As the number of server names grows, nginx performs a constant-time hash lookup.

Input Size (n)Approx. Operations
10~1 hash lookup
100~1 hash lookup
1000~1 hash lookup

Pattern observation: The number of operations is constant regardless of the number of server names.

Final Time Complexity

Time Complexity: O(1)

This means the time to find a matching server name is constant, independent of how many names are listed, due to hashing.

Common Mistake

[X] Wrong: "nginx checks each server_name one by one, so more names mean more time."

[OK] Correct: nginx uses a hash table, enabling constant-time lookups.

Interview Connect

Understanding how nginx matches server names helps you explain how web servers handle requests efficiently.

Self-Check

"What if nginx used a linear list to store server names without hashing? How would the time complexity change?"

Practice

(1/5)
1. What is the main purpose of the server_name directive in an nginx configuration?
easy
A. To define the port number for the server
B. To specify which domain names the server should respond to
C. To set the root directory for website files
D. To configure the SSL certificate path

Solution

  1. Step 1: Understand the role of server_name

    The server_name directive tells nginx which domain names it should respond to when a request arrives.
  2. Step 2: Compare with other directives

    Other directives like listen set ports, root sets file paths, and SSL directives configure certificates, not domain names.
  3. Final Answer:

    To specify which domain names the server should respond to -> Option B
  4. Quick Check:

    server_name = domain names [OK]
Hint: server_name always sets domains nginx listens for [OK]
Common Mistakes:
  • Confusing server_name with listen port
  • Thinking server_name sets file paths
  • Mixing server_name with SSL settings
2. Which of the following is the correct syntax to set multiple domain names in the server_name directive?
easy
A. server_name example.com www.example.com;
B. server_name = example.com, www.example.com;
C. server_name: example.com www.example.com;
D. server_name example.com; www.example.com;

Solution

  1. Step 1: Recall nginx syntax for server_name

    The correct syntax lists domain names separated by spaces, ending with a semicolon.
  2. Step 2: Analyze each option

    server_name example.com www.example.com; correctly lists domains separated by spaces and ends with a semicolon. Options B and C use invalid characters (=, :, commas). server_name example.com; www.example.com; incorrectly splits domains into two statements.
  3. Final Answer:

    server_name example.com www.example.com; -> Option A
  4. Quick Check:

    Multiple domains separated by spaces [OK]
Hint: List domains with spaces, end with semicolon [OK]
Common Mistakes:
  • Using commas between domain names
  • Adding equal signs or colons
  • Splitting domains into multiple directives
3. Given this nginx server block snippet:
server {
    listen 80;
    server_name *.example.com example.org;
}

Which domain will nginx respond to?
medium
A. Only example.org
B. Only subdomains of example.com
C. Both example.org and any subdomain of example.com
D. Any domain ending with .com

Solution

  1. Step 1: Understand the wildcard in server_name

    The *.example.com matches any subdomain like www.example.com or blog.example.com, but not example.com itself.
  2. Step 2: Check the other domain

    The directive also includes example.org, so nginx responds to that exact domain as well.
  3. Final Answer:

    Both example.org and any subdomain of example.com -> Option C
  4. Quick Check:

    wildcard + exact domain = both matched [OK]
Hint: Wildcard matches subdomains; list exact domains separately [OK]
Common Mistakes:
  • Thinking wildcard matches main domain without subdomain
  • Assuming wildcard matches all .com domains
  • Ignoring exact domain entries
4. You wrote this nginx config:
server {
    listen 80;
    server_name www.example.com, example.org;
}

Why does nginx fail to start?
medium
A. Because semicolon is missing after server_name
B. Because the listen directive is missing a port
C. Because server_name must be inside location block
D. Because commas are not allowed between domain names

Solution

  1. Step 1: Identify syntax error in server_name

    The server_name directive expects domain names separated by spaces, not commas.
  2. Step 2: Check other parts of config

    The listen directive correctly specifies port 80. server_name is valid in server block, and semicolon is present.
  3. Final Answer:

    Because commas are not allowed between domain names -> Option D
  4. Quick Check:

    No commas allowed in server_name list [OK]
Hint: Separate domains with spaces, never commas [OK]
Common Mistakes:
  • Using commas between domains
  • Placing server_name inside location block
  • Omitting semicolon at end
5. You want nginx to respond to example.com, www.example.com, and any subdomain like blog.example.com. Which server_name directive is correct?
hard
A. server_name example.com www.example.com *.example.com;
B. server_name example.com www.example.com;
C. server_name *.example.com;
D. server_name www.example.com example.com*;

Solution

  1. Step 1: Understand domain matching with wildcards

    The wildcard *.example.com matches subdomains like blog.example.com but does NOT match the root domain example.com.
  2. Step 2: Include all required domains explicitly

    To cover example.com and www.example.com, they must be listed explicitly along with the wildcard.
  3. Final Answer:

    server_name example.com www.example.com *.example.com; -> Option A
  4. Quick Check:

    Wildcard excludes root domain, list all needed domains [OK]
Hint: Wildcard excludes root domain; list it explicitly [OK]
Common Mistakes:
  • Assuming wildcard covers root domain
  • Using invalid wildcard syntax like example.com*
  • Omitting www or root domain
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