Bird
Raised Fist0
Nginxdevops~10 mins

Brotli compression 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 - Brotli compression
Client sends HTTP request
Nginx receives request
Check if Brotli module enabled?
NoServe uncompressed content
Yes
Check if client supports Brotli (Accept-Encoding)
Compress response
Send compressed response to client
Nginx checks if Brotli is enabled and if the client supports it, then compresses the response before sending.
Execution Sample
Nginx
brotli on;
brotli_comp_level 5;
brotli_types text/html text/css application/javascript;
Enable Brotli compression in nginx with level 5 for HTML, CSS, and JS files.
Process Table
StepActionConditionResultResponse Sent
1Receive HTTP requestN/ARequest receivedNo response yet
2Check if Brotli enabledbrotli on?YesNo response yet
3Check client Accept-EncodingIncludes 'br'?YesNo response yet
4Compress responseContent type matches brotli_types?YesNo response yet
5Send responseN/AResponse sent with Content-Encoding: brCompressed content sent
6EndN/ARequest completeProcess ends
💡 Process ends after sending compressed response or uncompressed if conditions not met
Status Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
brotli_enabledundefinedtruetruetruetrue
client_accepts_brotliundefinedundefinedtruetruetrue
response_compressedfalsefalsefalsetruetrue
response_sentfalsefalsefalsefalsetrue
Key Moments - 2 Insights
Why does nginx send uncompressed content even if Brotli is enabled?
Because the client’s Accept-Encoding header does not include 'br', as shown in execution_table step 3 where condition is No, leading to uncompressed response.
What happens if the content type is not listed in brotli_types?
Nginx will not compress the response even if Brotli is enabled and client supports it, as in step 4 where content type check fails, so response is sent uncompressed.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does nginx decide to compress the response?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Check the 'Action' and 'Result' columns in step 4 for compression decision
According to variable_tracker, what is the value of 'response_compressed' after Step 3?
Afalse
Bundefined
Ctrue
Dnull
💡 Hint
Look at the 'response_compressed' row under 'After Step 3' column
If the client does not support Brotli, how does the execution_table change?
AStep 4 compresses anyway
BStep 3 condition is No and response is uncompressed
CStep 5 sends compressed response
DStep 2 disables Brotli
💡 Hint
Refer to step 3 condition and response sent columns
Concept Snapshot
Enable Brotli in nginx with 'brotli on;'.
Set compression level with 'brotli_comp_level'.
Specify file types in 'brotli_types'.
Nginx compresses only if client supports 'br' encoding.
Compressed response sent with 'Content-Encoding: br'.
Full Transcript
Brotli compression in nginx works by first enabling the module with 'brotli on;'. When a client sends a request, nginx checks if Brotli is enabled and if the client supports Brotli compression via the Accept-Encoding header. If both conditions are true and the content type matches configured types, nginx compresses the response using Brotli and sends it with the appropriate header. Otherwise, it sends the response uncompressed. This process ensures efficient delivery of web content when supported.

Practice

(1/5)
1. What is the main purpose of enabling Brotli compression in Nginx?
easy
A. To increase the security of the website
B. To reduce file sizes and speed up website loading
C. To change the website's color scheme
D. To block unwanted visitors

Solution

  1. Step 1: Understand Brotli compression purpose

    Brotli compression is designed to reduce the size of files sent from the server to the browser.
  2. Step 2: Connect compression to website speed

    Smaller files load faster, improving website speed and user experience.
  3. Final Answer:

    To reduce file sizes and speed up website loading -> Option B
  4. Quick Check:

    Brotli compression = faster loading [OK]
Hint: Compression reduces file size to speed up loading [OK]
Common Mistakes:
  • Thinking Brotli improves security directly
  • Confusing compression with design changes
  • Assuming it blocks visitors
2. Which of the following is the correct way to enable Brotli compression in an Nginx configuration?
easy
A. brotli on;
B. brotli_enable on;
C. enable_brotli true;
D. brotli_compression = yes;

Solution

  1. Step 1: Recall Nginx Brotli syntax

    The correct directive to enable Brotli compression is brotli on;.
  2. Step 2: Check other options for syntax errors

    Options A, C, and D use incorrect directive names or syntax not valid in Nginx.
  3. Final Answer:

    brotli on; -> Option A
  4. Quick Check:

    Enable Brotli = brotli on; [OK]
Hint: Use exact directive 'brotli on;' to enable compression [OK]
Common Mistakes:
  • Adding extra words like 'enable' or 'compression'
  • Using '=' instead of ';' to end directive
  • Wrong directive names
3. Given this Nginx snippet, what will happen when a browser requests a CSS file?
brotli on;
brotli_comp_level 5;
location /css/ {
  brotli_types text/css;
}
medium
A. Compression level 5 disables Brotli
B. CSS files will not be compressed because brotli_types is missing
C. CSS files will be compressed with Brotli at level 5
D. All files will be compressed regardless of type

Solution

  1. Step 1: Analyze the configuration

    Brotli is enabled with brotli on; and compression level set to 5.
  2. Step 2: Check brotli_types directive

    Only files with MIME type text/css will be compressed, so CSS files are included.
  3. Final Answer:

    CSS files will be compressed with Brotli at level 5 -> Option C
  4. Quick Check:

    brotli_types text/css = CSS compressed [OK]
Hint: brotli_types controls which file types get compressed [OK]
Common Mistakes:
  • Assuming all files compress without brotli_types
  • Thinking compression level disables Brotli
  • Ignoring MIME type filtering
4. You enabled Brotli in Nginx but notice no files are compressed. Which configuration mistake could cause this?
medium
A. Missing brotli on; directive
B. Setting brotli_comp_level to 0
C. Not specifying brotli_types for file types
D. Using brotli on without a semicolon

Solution

  1. Step 1: Check syntax correctness

    In Nginx, directives must end with a semicolon. Missing it causes config errors.
  2. Step 2: Understand impact of missing semicolon

    Without the semicolon, Nginx will fail to load the config properly, so Brotli won't work.
  3. Final Answer:

    Using brotli on without a semicolon -> Option D
  4. Quick Check:

    Missing semicolon breaks config [OK]
Hint: Always end Nginx directives with a semicolon [OK]
Common Mistakes:
  • Ignoring semicolon syntax errors
  • Assuming 0 disables compression but config still loads
  • Thinking brotli_types is mandatory to enable Brotli
5. You want to optimize Brotli compression for your website serving HTML, CSS, and JavaScript files. Which Nginx configuration snippet correctly enables Brotli for these types with maximum compression level?
hard
A. brotli on;\nbrotli_comp_level 11;\nbrotli_types text/html text/css application/javascript;
B. brotli on;\nbrotli_comp_level 5;\nbrotli_types image/png image/jpeg;
C. brotli enable;\nbrotli_level 11;\nbrotli_types text/html text/css application/javascript;
D. brotli on;\nbrotli_comp_level 11;\nbrotli_types text/plain text/xml;

Solution

  1. Step 1: Identify correct directive names and values

    Enable Brotli with brotli on; and set max compression level with brotli_comp_level 11;.
  2. Step 2: Choose correct MIME types for HTML, CSS, JavaScript

    Use text/html, text/css, and application/javascript in brotli_types.
  3. Step 3: Eliminate incorrect options

    The snippet starting with 'brotli enable;' uses invalid directive names ('brotli_level' instead of 'brotli_comp_level'). The snippet with 'image/png image/jpeg' targets unsuitable file types. The snippet with 'text/plain text/xml' uses wrong MIME types and misses JavaScript.
  4. Final Answer:

    brotli on;\nbrotli_comp_level 11;\nbrotli_types text/html text/css application/javascript; -> Option A
  5. Quick Check:

    Correct directives + right types = brotli on;\nbrotli_comp_level 11;\nbrotli_types text/html text/css application/javascript; [OK]
Hint: Use brotli_comp_level 11 for max compression [OK]
Common Mistakes:
  • Using wrong directive names like brotli_level
  • Compressing image types with Brotli
  • Forgetting JavaScript MIME type