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
Adding Response Headers with nginx's add_header
📖 Scenario: You are managing a web server using nginx. You want to add custom response headers to improve security and provide extra information to clients.
🎯 Goal: Learn how to add response headers in nginx configuration using the add_header directive.
📋 What You'll Learn
Create a basic nginx server block configuration
Add a custom response header named X-Custom-Header with value MyValue
Add a security header named X-Content-Type-Options with value nosniff
Print the final nginx configuration to verify the headers are added
💡 Why This Matters
🌍 Real World
Web servers often need custom headers to improve security and provide metadata to browsers and clients.
💼 Career
Knowing how to configure nginx headers is a key skill for DevOps engineers managing web infrastructure.
Progress0 / 4 steps
1
Create a basic nginx server block
Create a variable called nginx_config and assign it a string containing a basic nginx server block listening on port 80 with a root directory /var/www/html and an index file index.html.
Nginx
Hint
Use triple quotes or escaped newlines to create a multi-line string for the nginx configuration.
2
Add a custom response header
Add a line inside the server block in nginx_config to add a response header X-Custom-Header with the value MyValue using the add_header directive.
Nginx
Hint
Place the add_header directive inside the server block, aligned with other directives.
3
Add a security response header
Add another add_header directive inside the server block in nginx_config to add the header X-Content-Type-Options with the value nosniff.
Nginx
Hint
Remember to add the new add_header directive on a new line inside the server block.
4
Print the final nginx configuration
Write a print statement to display the full nginx_config string.
Nginx
Hint
Use print(nginx_config) to show the configuration.
Practice
(1/5)
1. What is the main purpose of the add_header directive in nginx?
easy
A. To configure server listening ports
B. To add extra information to HTTP responses
C. To redirect HTTP requests to HTTPS
D. To define server root directory
Solution
Step 1: Understand the role of add_header
The add_header directive is used to add extra HTTP headers to responses sent by nginx.
Step 2: Compare with other options
Redirecting requests, configuring ports, and defining root directories are unrelated to adding headers.
Final Answer:
To add extra information to HTTP responses -> Option B
Quick Check:
add_header adds headers [OK]
Hint: Remember: add_header adds info to HTTP responses [OK]
Common Mistakes:
Confusing add_header with redirect directives
Thinking add_header sets server ports
Assuming add_header changes root directory
2. Which of the following is the correct syntax to add a custom header named X-Custom-Header with value MyValue in nginx?
easy
A. add_header "X-Custom-Header: MyValue";
B. add_header X-Custom-Header = MyValue;
C. add_header X-Custom-Header MyValue;
D. add_header X-Custom-Header => MyValue;
Solution
Step 1: Recall nginx add_header syntax
The correct syntax is add_header name value; without extra symbols like = or =>.
Step 2: Validate each option
add_header X-Custom-Header MyValue; matches correct syntax. Options A, C, and D use invalid syntax with quotes or symbols.
Final Answer:
add_header X-Custom-Header MyValue; -> Option C
Quick Check:
Syntax is add_header name value; [OK]
Hint: Use simple syntax: add_header name value; [OK]
Common Mistakes:
Adding quotes around header name and value
Using = or => symbols incorrectly
Missing semicolon at the end
3. Given this nginx config snippet inside a server block:
B. The response includes header X-Test: Hello with 404 status
C. The response returns 200 OK with X-Test header
D. The response returns 404 without X-Test header
Solution
Step 1: Understand default add_header behavior on errors
By default, add_header does NOT add headers on error responses like 404.
Step 2: Analyze the config and request
The location returns 404, so X-Test header is omitted unless always is used.
Final Answer:
The response returns 404 without X-Test header -> Option D
Quick Check:
Headers not added on errors without always [OK]
Hint: Headers need 'always' to appear on error responses [OK]
Common Mistakes:
Assuming headers always appear on error responses
Confusing return status with header presence
Expecting 200 OK instead of 404
4. You want to add a security header X-Frame-Options: DENY to all responses including errors. Which nginx config fixes this incorrect snippet?
add_header X-Frame-Options DENY;
But headers are missing on 404 pages.
medium
A. Change to add_header X-Frame-Options DENY always;
B. Add always; on a separate line
C. Use add_header X-Frame-Options DENY on_error;
D. Move add_header inside error_page block
Solution
Step 1: Identify why headers are missing on errors
By default, add_header skips error responses unless always is added.
Step 2: Fix syntax to include headers on all responses
Adding always on the same line ensures headers appear even on errors.
Final Answer:
Change to add_header X-Frame-Options DENY always; -> Option A
Quick Check:
Use 'always' on same line to add headers on errors [OK]
Hint: Add 'always' on same line to include headers on errors [OK]
Common Mistakes:
Placing 'always' on a separate line
Using invalid keywords like 'on_error'
Moving add_header inside unrelated blocks
5. You want to add two headers: Cache-Control: no-store for all responses, and Strict-Transport-Security: max-age=31536000 only for successful responses (status 200-299). Which nginx config achieves this correctly?
hard
A. add_header Cache-Control no-store always;
add_header Strict-Transport-Security max-age=31536000;
B. add_header Cache-Control no-store;
add_header Strict-Transport-Security max-age=31536000 always;
C. add_header Cache-Control no-store;
add_header Strict-Transport-Security max-age=31536000;
D. add_header Cache-Control no-store always;
add_header Strict-Transport-Security max-age=31536000 always;
Solution
Step 1: Understand 'always' effect on headers
The always flag makes headers appear on all responses including errors.
Step 2: Apply 'always' only to Cache-Control
We want Cache-Control on all responses, so add always there. For Strict-Transport-Security, omit always to restrict to 2xx responses.
Final Answer:
add_header Cache-Control no-store always;
add_header Strict-Transport-Security max-age=31536000; -> Option A
Quick Check:
'always' for all responses, omit for success-only [OK]
Hint: Use 'always' only for headers needed on errors [OK]
Common Mistakes:
Adding 'always' to all headers causing unwanted error headers
Omitting 'always' for headers needed on errors
Misunderstanding which responses get headers without 'always'