Bird
Raised Fist0
Nginxdevops~3 mins

Why server_name directive in Nginx? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your website could instantly recognize every domain visitors use without confusion?

The Scenario

Imagine you run a website that should respond to multiple domain names like example.com and www.example.com. Without a clear way to tell your server which domain to listen for, you have to manually check every request and guess where to send it.

The Problem

Manually handling domain names is slow and confusing. You might send visitors to the wrong site or get errors. It's like answering the phone without knowing who's calling, leading to mistakes and unhappy users.

The Solution

The server_name directive in nginx lets you clearly list all domain names your server should respond to. This way, nginx automatically routes visitors to the right website without guesswork or errors.

Before vs After
✗ Before
if ($host = 'example.com') { ... } if ($host = 'www.example.com') { ... }
✓ After
server_name example.com www.example.com;
What It Enables

It enables your server to quickly and reliably handle multiple domain names, improving user experience and simplifying your configuration.

Real Life Example

A company owns example.com and example.net. Using server_name, their nginx server serves the right website for each domain without confusion or extra code.

Key Takeaways

The server_name directive tells nginx which domains to serve.

It replaces slow, error-prone manual checks.

It makes managing multiple domains easy and reliable.

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