Install NGINX with HTTP/2 and Pagespeed

[toc] Been playing recently with nginx rather than apache (nginx supports http/2 now as of 1.9.5) and its been quite a nice change with a much cleaner config in my mind. Pagespeed is also quite a nice module from our friends over at google to help automatically optimise content with some quite cool results for me so far. The only downside is that it requires a manual build of nginx although as you can see below this still only take ~5 minutes :)

Install:

First off install prerequisite packages
yum install gcc-c++ pcre-dev pcre-devel zlib-devel make unzipyum install gcc-c++ pcre-dev pcre-devel zlib-devel make unzip

 

Pagespeed:

Then Grab pagespeed and PSOL (update version for latest or wanted version).

cd /tmp
NPS_VERSION=1.9.32.10
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz

 

Nginx:

Grab Nginx (update version for latest or wanted version)

cd /tmp
NGINX_VERSION=1.9.5
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/

 

Compile:

Now lets compile with http/2 and pagespeed :)
./configure --with-http_v2_module --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-file-aio --with-ipv6 --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/tmp/ngx_pagespeed-release-${NPS_VERSION}-beta/
make
make install

Testing:

Run nginx -V to confirm we have the functions ready for us (should see http2 and pagespeed in the output)

This is a simple nginx config that would confirm http/2 and pagespeed is there for us to use ok but wouldnt be any good to server any content.

server {
    # Enabling http/2 for v4/6
        listen  www.m00nie.com:443 ssl http2;
        listen [beef::c00b]:443 ssl http2;
    server_name www.m00nie.com;
    root /usr/share/weeeeeee;

    ## activating ngx_pagespeed
    pagespeed on;
    pagespeed RewriteLevel CoreFilters;

    location / {
        }
}

 

Quickly validate it with -t

[root@spdy]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

You now have Nginx ready to go with both http/2 and pagespeed! Lost of good documentation around the filters avilable and what they do can be found here https://developers.google.com/speed/pagespeed/module/filters

m00nie :D