Bird
Raised Fist0
Nginxdevops~10 mins

Directives and blocks in Nginx - Step-by-Step Execution

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
Process Flow - Directives and blocks
Start parsing config
Read directive or block
If directive
Execute directiveContinue
If block start
Enter block contextParse inner directives
Block end found?
NoParse inner directives
Yes
Exit block context
Continue
End of config file
Nginx reads each line as a directive or block start. Directives execute immediately. Blocks open a new context to parse nested directives until the block ends.
Execution Sample
Nginx
http {
  server {
    listen 80;
  }
}
This config defines an http block containing a server block with a listen directive.
Process Table
StepConfig Line ReadActionContext StackResulting State
1http {Start http block['http']Entered http context
2server {Start server block inside http['http', 'server']Entered server context
3listen 80;Execute listen directive['http', 'server']Server listens on port 80
4}End server block['http']Exited server context
5}End http block[]Exited http context, config parsing done
💡 Reached end of config file, all blocks closed properly
Status Tracker
Context StackStartAfter Step 1After Step 2After Step 3After Step 4After Step 5
Context Stack[]['http']['http', 'server']['http', 'server']['http'][]
Key Moments - 3 Insights
Why does the context stack grow when we see a block start like 'http {'?
Because blocks open a new context to group directives inside. The stack tracks nested blocks as shown in execution_table steps 1 and 2.
What happens when we reach a closing brace '}'?
The parser exits the current block context, popping it from the stack. See execution_table steps 4 and 5 where contexts are removed.
Are directives inside blocks executed immediately or delayed?
Directives are executed immediately within their current context. For example, 'listen 80;' runs at step 3 inside the 'server' block.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table. What is the context stack after reading 'server {'?
A['server']
B['http']
C['http', 'server']
D[]
💡 Hint
Check the 'Context Stack' column at step 2 in the execution_table.
At which step does the parser exit the 'server' block?
AStep 4
BStep 3
CStep 5
DStep 2
💡 Hint
Look for the closing brace '}' that ends the server block in execution_table.
If the 'listen 80;' directive was missing, how would the execution_table change at step 3?
AStep 3 would still execute 'listen 80;'
BStep 3 would close the server block
CStep 3 would show no action and no change in state
DStep 3 would start a new block
💡 Hint
Without 'listen 80;', the third line read would be the closing brace '}' for the server block.
Concept Snapshot
Nginx config uses directives and blocks.
Directives end with a semicolon and run immediately.
Blocks start with '{' and group nested directives.
Blocks create a context stack that grows and shrinks.
Closing '}' ends the current block context.
Parser reads line by line, managing contexts accordingly.
Full Transcript
Nginx configuration files consist of directives and blocks. The parser reads each line. When it sees a directive, it executes it immediately. When it sees a block start like 'http {', it enters a new context and pushes it onto a stack. Inside blocks, nested directives or blocks can appear. When a closing brace '}' is found, the parser exits the current block context by popping it from the stack. This process continues until the end of the file. For example, in the sample config, the parser enters the 'http' block, then the 'server' block, executes the 'listen 80;' directive, then exits the 'server' block, and finally exits the 'http' block. This stack-based approach helps organize configuration logically and hierarchically.

Practice

(1/5)
1. What is the main difference between a directive and a block in an nginx configuration?
easy
A. A directive groups multiple blocks; a block is a single instruction ending with a semicolon.
B. A directive is a single instruction ending with a semicolon; a block groups multiple directives inside curly braces.
C. A directive is used only for server settings; a block is used only for location settings.
D. A directive must always contain a block inside it.

Solution

  1. Step 1: Understand directive syntax

    A directive is a single instruction that ends with a semicolon in nginx configuration.
  2. Step 2: Understand block syntax

    A block groups multiple directives inside curly braces to organize related settings.
  3. Final Answer:

    A directive is a single instruction ending with a semicolon; a block groups multiple directives inside curly braces. -> Option B
  4. Quick Check:

    Directive = single instruction; Block = group of directives [OK]
Hint: Directives end with ; blocks use { } to group [OK]
Common Mistakes:
  • Confusing directives with blocks
  • Thinking blocks end with semicolon
  • Assuming directives can contain blocks
2. Which of the following is the correct syntax for an nginx directive?
easy
A. listen 80;
B. server { listen 80 }
C. location / { listen 80 }
D. listen 80

Solution

  1. Step 1: Identify directive syntax

    A directive must end with a semicolon and is a single instruction.
  2. Step 2: Check each option

    listen 80; ends with a semicolon and is a single instruction: listen 80;.
  3. Final Answer:

    listen 80; -> Option A
  4. Quick Check:

    Directive ends with ; [OK]
Hint: Directives always end with a semicolon ; [OK]
Common Mistakes:
  • Omitting semicolon at end
  • Using curly braces for directives
  • Mixing block syntax with directive
3. Given this nginx configuration snippet, what will happen when a request is made to /images?
location /images/ {
    root /data;
    autoindex on;
}
medium
A. Nginx will return a 404 error because root is incorrectly used.
B. Nginx will serve files from /images/ directory on the server root.
C. Nginx will redirect requests to /data/images/ automatically.
D. Nginx will serve files from /data/images/ and show a directory listing if no index file exists.

Solution

  1. Step 1: Understand the location block

    The location block matches requests starting with /images/.
  2. Step 2: Interpret the root directive

    Root sets the base directory to /data, so files are served from /data/images/.
  3. Step 3: Effect of autoindex on

    If no index file exists, nginx shows a directory listing.
  4. Final Answer:

    Nginx will serve files from /data/images/ and show a directory listing if no index file exists. -> Option D
  5. Quick Check:

    location + root + autoindex = serve files with listing [OK]
Hint: root sets base path; autoindex shows directory listing [OK]
Common Mistakes:
  • Confusing root with alias
  • Assuming redirect happens automatically
  • Ignoring autoindex effect
4. Identify the error in this nginx configuration snippet:
server {
    listen 80
    server_name example.com;
}
medium
A. listen directive should be inside location block.
B. server_name directive cannot be inside server block.
C. Missing semicolon after listen 80 directive.
D. Curly braces are missing around listen directive.

Solution

  1. Step 1: Check syntax of directives

    Each directive must end with a semicolon in nginx configuration.
  2. Step 2: Locate missing semicolon

    The listen 80 directive is missing a semicolon at the end.
  3. Final Answer:

    Missing semicolon after listen 80 directive. -> Option C
  4. Quick Check:

    Every directive ends with ; [OK]
Hint: Check every directive ends with ; [OK]
Common Mistakes:
  • Forgetting semicolon at directive end
  • Misplacing directives outside server block
  • Adding unnecessary braces
5. You want to configure nginx to serve static files from /var/www/html for all requests under /static/. Which configuration block correctly achieves this?
hard
A. location /static/ { alias /var/www/html/; }
B. location /static { alias /var/www/html; }
C. location /static/ { root /var/www/html; }
D. location /static/ { root /var/www/html/; }

Solution

  1. Step 1: Understand root vs alias

    Root appends the request URI to the root path; alias replaces the location prefix with the alias path.
  2. Step 2: Match location and alias usage

    For prefix locations ending with /, alias must end with / to correctly map paths.
  3. Step 3: Evaluate options

    location /static/ { alias /var/www/html/; } uses location /static/ { alias /var/www/html/; } which correctly serves files under /static/ from /var/www/html.
  4. Final Answer:

    location /static/ { alias /var/www/html/; } -> Option A
  5. Quick Check:

    Use alias with trailing slash for prefix location [OK]
Hint: Use alias with trailing slash for prefix locations [OK]
Common Mistakes:
  • Using root instead of alias for prefix paths
  • Missing trailing slash on alias path
  • Mismatching location and alias slashes