does anyone know of a way to get nginx (or any other method) to minify html output on the fly? It seems straightforward to me and can shave a few kb off and help speed up the site.

  • 3
    I'm not sure of an extension that has this capability, but, is it worth it? There will be a CPU impact on each request, it means your website will need more CPU as your load increases. I assume you're already using the gzip extension to compress the text before you send it, so, all whitespace will be removed as part of that process. You can also pre-gz your files, that will save CPU time on each request. – Andrew Taylor Jan 14 '11 at 13:42
  • @AndrewTaylor, so that's why you'd better cache it afterwards. – poige May 2 '12 at 14:35

Google Pagespeed for Nginx does minification, and a bunch of other things. However when I benchmarked it didn't make enough of a difference to bother with, given my site was already well optimized. For sites that aren't optimized already it would probably make a significant difference.

There's a tutorial on how to get Nginx/Pagespeed working here. You have to build it from source. I tend to keep the linked website updated, if I happen to touch that area, so it may be more up to date than this answer below.

cd /home/ec2-user
mkdir nginx-build
cd nginx-build
service nginx stop
yum groupinstall "Development Tools"
yum install pcre-devel zlib-devel openssl-devel
wget http://nginx.org/download/nginx-1.9.11.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
wget https://github.com/openresty/headers-more-nginx-module/archive/v0.29.tar.gz
tar -xzf nginx-1.9.11.tar.gz
tar -xzf ngx_cache_purge-2.3.tar.gz
tar -xzf v0.29.tar.gz
tar -xzf    # Google Pagespeed, optional
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${ngx_version}-beta.zip   # Google Pagespeed, optional
cd ngx_pagespeed-release-   # Google Pagespeed, optional
wget https://dl.google.com/dl/page-speed/psol/${ngx_version}.tar.gz   # Google Pagespeed, optional
cd ../nginx-1.9.9
# Note that I have no idea what the next line does but it was in the official guide
# Safe option, slower, lots of modules included
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/tmp/ngx_cache_purge-2.3 --add-module=/tmp/headers-more-nginx-module-0.29 --with-http_realip_module --add-modeule=../ngx_pagespeed-release-
make && make install
make clean  (NB: optional)
service nginx start
| improve this answer | |

My recommendation: forget minify and use the gzip module. It will work better and accomplish the same goal. But, as of course, you can do it. There's a 3rd party module named strip, especially for this topic.

Example gzip Configuration:

# Context:  http, server, location

    gzip            on;
    gzip_min_length 1000;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain application/xml;
| improve this answer | |
  • 2
    Good find. Doesn't look production-ready, though, so I second your recommendation of using gzip instead - saves much more than minifying the HTML. – pjmorse May 2 '12 at 14:07
  • 1
    Don't forget to add some more gzip_types such as text/html. – Gerald Mar 11 '18 at 4:29
  • Note that gzip compression of HTML pages under TLS/SSL might be vulnerable to BREACH. – Naglis Apr 5 '18 at 19:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.