Bird
Raised Fist0
Nginxdevops~30 mins

HTTP/2 configuration in Nginx - Mini Project: Build & Apply

Choose your learning style10 modes available
HTTP/2 Configuration in Nginx
📖 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

  1. 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).
  2. Step 2: Identify correct directive usage

    The http2 parameter does not belong in server_name, root, or location blocks.
  3. Final Answer:

    Add http2 to the listen directive with SSL enabled -> Option C
  4. 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

  1. Step 1: Review nginx listen directive syntax

    The correct order is listen [port] ssl http2; to enable SSL and HTTP/2 on the port.
  2. 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.
  3. Final Answer:

    listen 443 ssl http2; -> Option D
  4. 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?
server {
    listen 443 ssl http2;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    server_name example.com;
}
medium
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

  1. Step 1: Analyze listen directive

    The listen directive includes ssl and http2, enabling HTTPS with HTTP/2 support.
  2. Step 2: Confirm SSL certificates presence

    SSL certificate and key files are specified, so HTTPS can work properly.
  3. Final Answer:

    The server will accept HTTPS connections using HTTP/2 protocol -> Option A
  4. 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

  1. 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.
  2. Step 2: Evaluate other options

    Options A, C, and D are invalid uses of http2 but the main cause is missing SSL.
  3. Final Answer:

    Forgetting to enable SSL (missing ssl in listen directive) -> Option A
  4. 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;
}
B.
server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    server_name example.com;
}
C.
server {
    listen 443 ssl http2;
    server_name example.com;
}

server {
    listen 80 ssl http2;
    return 301 https://$host$request_uri;
}
D.
server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    server_name example.com;
}

server {
    listen 80;
    return 301 https://$host$request_uri;
}

Solution

  1. Step 1: Redirect HTTP to HTTPS on port 80

    The first server block listens on port 80 without SSL and redirects all requests to HTTPS using a 301 redirect.
  2. Step 2: Enable HTTPS with HTTP/2 on port 443

    The second server block listens on port 443 with ssl and http2 enabled, and specifies SSL certificates.
  3. Step 3: Verify other options

    server {
        listen 80 http2;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name example.com;
    }
    incorrectly enables http2 on port 80 (no SSL).
    server {
        listen 443 ssl http2;
        server_name example.com;
    }
    
    server {
        listen 80 ssl http2;
        return 301 https://$host$request_uri;
    }
    enables SSL and http2 on port 80 which is invalid.
    server {
        listen 443 ssl;
        ssl_certificate /etc/ssl/cert.pem;
        ssl_certificate_key /etc/ssl/key.pem;
        server_name example.com;
    }
    
    server {
        listen 80;
        return 301 https://$host$request_uri;
    }
    misses http2 on port 443.
  4. Final Answer:

    The configuration correctly redirects HTTP to HTTPS and enables HTTP/2 on HTTPS -> Option B
  5. Quick Check:

    Redirect HTTP on 80, enable SSL+http2 on 443 [OK]
Hint: Redirect HTTP on 80, enable SSL+http2 on 443 [OK]
Common Mistakes:
  • Enabling http2 on port 80 without SSL
  • Missing http2 on HTTPS server block
  • Not redirecting HTTP to HTTPS properly
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