📖 Scenario: You are setting up a web server using Nginx. To improve website speed and performance, you want to enable HTTP/2 protocol support.
🎯 Goal: Configure Nginx to serve a website with HTTP/2 enabled on port 443 (HTTPS).
📋 What You'll Learn
Create a basic Nginx server block listening on port 443 with SSL enabled
Add the HTTP/2 directive to the listen configuration
Use a self-signed SSL certificate and key file paths as /etc/ssl/certs/selfsigned.crt and /etc/ssl/private/selfsigned.key
Ensure the server block has a root directory set to /var/www/html
Print the final server block configuration
💡 Why This Matters
🌍 Real World
Web servers use HTTP/2 to speed up loading times by allowing multiple requests over a single connection. Enabling HTTP/2 in Nginx improves user experience on websites.
💼 Career
DevOps engineers and system administrators often configure web servers like Nginx to optimize performance and security by enabling protocols like HTTP/2.
Progress0 / 4 steps
1
Create basic Nginx server block with SSL
Create a server block in Nginx configuration with listen 443 ssl;, set server_name example.com;, and set root /var/www/html;.
Nginx
Hint
Start by writing a server block with listen 443 ssl; and set the server_name and root as instructed.
2
Add HTTP/2 support to the listen directive
Modify the listen directive to include http2 so it reads listen 443 ssl http2;.
Nginx
Hint
Add http2 after ssl in the listen directive to enable HTTP/2.
3
Add a location block to serve index.html
Inside the server block, add a location / block that uses index index.html; to serve the homepage.
Nginx
Hint
Use a location / block and inside it add index index.html; to specify the homepage file.
4
Print the complete Nginx server block configuration
Print the entire Nginx server block configuration as a single string.
Nginx
Hint
Use a triple-quoted string to store the full configuration and print it.
Practice
(1/5)
1. What is the correct way to enable HTTP/2 in an nginx server block?
easy
A. Add http2 to the location block
B. Add http2 to the server_name directive
C. Add http2 to the listen directive with SSL enabled
D. Add http2 to the root directive
Solution
Step 1: Understand HTTP/2 enabling in nginx
HTTP/2 is enabled by adding the http2 parameter to the listen directive, which must be used with SSL (HTTPS).
Step 2: Identify correct directive usage
The http2 parameter does not belong in server_name, root, or location blocks.
Final Answer:
Add http2 to the listen directive with SSL enabled -> Option C
Quick Check:
Enable HTTP/2 by adding http2 to listen with SSL [OK]
Hint: Add 'http2' only in listen directive with SSL [OK]
Common Mistakes:
Adding http2 to server_name or root directives
Forgetting to enable SSL when using http2
Placing http2 inside location blocks
2. Which of the following is the correct syntax to enable HTTP/2 on port 443 in nginx?
easy
A. listen 443 ssl;
B. listen http2 443 ssl;
C. listen 443 http2;
D. listen 443 ssl http2;
Solution
Step 1: Review nginx listen directive syntax
The correct order is listen [port] ssl http2; to enable SSL and HTTP/2 on the port.
Step 2: Check each option
listen 443 ssl http2; uses correct syntax: listen 443 ssl http2;. listen http2 443 ssl; reverses order but is invalid. listen 443 ssl; misses http2. listen 443 http2; misses ssl, which is required for http2.
Final Answer:
listen 443 ssl http2; -> Option D
Quick Check:
Correct syntax is 'listen 443 ssl http2;' [OK]
Hint: Use 'listen 443 ssl http2;' exactly for HTTP/2 [OK]
Common Mistakes:
Omitting ssl when enabling http2
Placing http2 before ssl in listen directive
Using http2 without SSL on port 443
3. Given this nginx server block snippet, what will happen when a client connects?
A. The server will accept HTTPS connections using HTTP/2 protocol
B. The server will accept HTTP connections only, no HTTP/2
C. The server will reject connections due to missing http2 directive
D. The server will accept HTTPS but use HTTP/1.1 only
Solution
Step 1: Analyze listen directive
The listen directive includes ssl and http2, enabling HTTPS with HTTP/2 support.
Step 2: Confirm SSL certificates presence
SSL certificate and key files are specified, so HTTPS can work properly.
Final Answer:
The server will accept HTTPS connections using HTTP/2 protocol -> Option A
Quick Check:
listen with ssl and http2 means HTTPS + HTTP/2 enabled [OK]
Hint: ssl + http2 in listen means HTTPS with HTTP/2 [OK]
Common Mistakes:
Assuming HTTP/2 works without ssl
Confusing HTTP and HTTPS ports
Ignoring the http2 parameter in listen
4. You added http2 to your nginx listen directive but HTTP/2 is not working. Which configuration mistake could cause this?
medium
A. Forgetting to enable SSL (missing ssl in listen directive)
B. Using http2 in the server_name directive
C. Setting listen to port 80 with http2
D. Adding http2 inside the location block
Solution
Step 1: Understand HTTP/2 requirements in nginx
HTTP/2 requires SSL (HTTPS) to be enabled in nginx; without ssl in the listen directive, HTTP/2 won't work.
Step 2: Evaluate other options
Options A, C, and D are invalid uses of http2 but the main cause is missing SSL.
Final Answer:
Forgetting to enable SSL (missing ssl in listen directive) -> Option A
Quick Check:
HTTP/2 needs SSL enabled in listen directive [OK]
Hint: Always include ssl with http2 in listen directive [OK]
Common Mistakes:
Not enabling ssl with http2
Placing http2 in wrong directives
Trying http2 on port 80 without ssl
5. You want to configure nginx to serve HTTP/2 on port 443 and redirect all HTTP (port 80) traffic to HTTPS. Which configuration snippet correctly achieves this?
hard
A.
server {
listen 80 http2;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
}