aboutsummaryrefslogtreecommitdiff
path: root/blog/2022-12-01-nginx-compression.org
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2023-12-02 11:23:08 -0600
committerChristian Cleberg <hello@cleberg.net>2023-12-02 11:23:08 -0600
commitcaccd81c3eb7954662d20cab10cc3afeeabca615 (patch)
tree567ed10350c1ee319c178952ab6aa48265977e58 /blog/2022-12-01-nginx-compression.org
downloadcleberg.net-caccd81c3eb7954662d20cab10cc3afeeabca615.tar.gz
cleberg.net-caccd81c3eb7954662d20cab10cc3afeeabca615.tar.bz2
cleberg.net-caccd81c3eb7954662d20cab10cc3afeeabca615.zip
initial commit
Diffstat (limited to 'blog/2022-12-01-nginx-compression.org')
-rw-r--r--blog/2022-12-01-nginx-compression.org74
1 files changed, 74 insertions, 0 deletions
diff --git a/blog/2022-12-01-nginx-compression.org b/blog/2022-12-01-nginx-compression.org
new file mode 100644
index 0000000..2a22d76
--- /dev/null
+++ b/blog/2022-12-01-nginx-compression.org
@@ -0,0 +1,74 @@
++++
+date = 2022-12-01
+title = "Enable GZIP Compression on Nginx"
+desciption = "Enable gzip compression on Nginx to server small text-based resources faster."
++++
+
+## Text Compression
+
+Text compression allows a web server to serve text-based resources faster than
+uncompressed data. This can speed up things like First Contentful Paint, Tie to
+Interactive, and Speed Index.
+
+## Enable Nginx Compression with gzip
+
+In order to enable text compression on Nginx, we need to enable it within the
+configuration file:
+
+```sh
+nano /etc/nginx/nginx.conf
+```
+
+Within the `http` block, find the section that shows something like the block
+below. This is the default gzip configuration I found in my `nginx.conf` file on
+Alpine Linux 3.17. Yours may look slightly different, just make sure that
+you're not creating any duplicate gzip options.
+
+```conf
+# Enable gzipping of responses.
+#gzip on;
+
+# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
+gzip_vary on;
+```
+
+Remove the default gzip lines and replace them with the following:
+
+```conf
+# Enable gzipping of responses.
+gzip on;
+gzip_vary on;
+gzip_min_length 10240;
+gzip_proxied expired no-cache no-store private auth;
+gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
+gzip_disable "MSIE [1-6]\.";
+```
+
+## Explanations of ngx_http_gzip_module Options
+
+Each of the lines above enables a different aspect of the gzip response for
+Nginx. Here are the full explanations:
+
+
+- `gzip` – Enables or disables gzipping of responses.
+- `gzip_vary` – Enables or disables inserting the “Vary: Accept-Encoding”
+response header field if the directives gzip, gzip_static, or gunzip are active.
+- `gzip_min_length` – Sets the minimum length of a response that will be
+gzipped. The length is determined only from the “Content-Length” response header field.
+- `gzip_proxied` – Enables or disables gzipping of responses for proxied
+requests depending on the request and response. The fact that the request is
+proxied is determined by the presence of the “Via” request header field.
+- `gzip_types` – Enables gzipping of responses for the specified MIME types in
+addition to “text/html”. The special value “*” matches any MIME type (0.8.29).
+Responses with the “text/html” type are always compressed.
+- `gzip_disable` – Disables gzipping of responses for requests
+with “User-Agent” header fields matching any of the specified regular
+expressions.
+ - The special mask “msie6” (0.7.12) corresponds to the regular expression “MSIE
+[4-6]\.”, but works faster. Starting from version 0.8.11, “MSIE 6.0; ... SV1” is
+excluded from this mask.
+
+More information on these directives and their options can be found on the
+[Module
+ngx_http_gzip_module](https://nginx.org/en/docs/http/ngx_http_gzip_module.html)
+page in Nginx's documentation.