Nginx (engine-x) is an open source and high-performance HTTP server, reverse proxy and IMAP/POP3 proxy server. The outstanding features of Nginx are stability, a rich feature set, simple configuration and low memory consumption. This tutorial shows how to build a Nginx .deb package for Ubuntu 16.04 from source that has Google PageSpeed module compiled in.
PageSpeed is a web server module developed by Google to speed up the website response time, optimize the returned HTML and reduce the page load time. ngx_pagespeed features including:
- Image optimization: stripping meta-data, dynamic resizing, recompression.
- CSS & JavaScript minification, concatenation, inlining, and outlining.
- Small resource inlining.
- Deferring image and JavaScript loading.
- HTML rewriting.
- Cache lifetime extension.
see more https://developers.google.com/speed/pagespeed/module/.
Install the build dependencies
sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
Installing nginx with ngx_pagespeed
Step 1 - Add the nginx repository
Create a new repository file /etc/apt/sources.list.d/nginx.list with you favourite editor.
nano /etc/apt/sources.list.d/nginx.list
There you add the lines: Save the file and exit the editor.
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx
Add the key and update the repository:
sudo sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
sudo apt-get update
Step 2 - Download nginx 1.12 from ubuntu repository
Create a new directory for the nginx source files and download the nginx sources with apt:
cd ~
mkdir -p ~/compile/nginx_source/
cd ~/compile/nginx_source/
apt-get source nginx
Sometimes, there is an error: ‘packages cannot be authenticated’. You can solve it by typing command below:
rm -rf /var/lib/apt/lists/
apt-get update
Next, install all dependencies to build the nginx package.
apt-get build-dep nginx
Step 3 - Download Pagespeed
Create a new directory for PageSpeed and download the PageSpeed source. In this tutorial, we will use pagespeed 1.11.33.4 (latest stable one)
mkdir -p ~/compile/ngx_pagespeed/
cd ~/compile/ngx_pagespeed/
export ngx_version=1.11.33.4
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${ngx_version}.zip
unzip release-${ngx_version}.zip
cd ngx_pagespeed-release-${ngx_version}/
wget https://dl.google.com/dl/page-speed/psol/${ngx_version}.tar.gz
tar -xf ${ngx_version}.tar.gz
Step 4 - Configure nginx to build with Pagespeed
Go to the ’nginx_source’ directory and edit the ‘rules’ file.
cd ~/compile/nginx_source/nginx-1.12.0-1/debian/
vim rules
Add this parameter under config.status.nginx
and config.status.nginx_debug
:
--add-module=~/compile/ngx_pagespeed/ngx_pagespeed-release-1.11.33.3-beta
Save and exit.
Step 5 - Build the nginx Ubuntu package and install it
Go to the nginx source directory and build nginx from source with the dpkg-buildpackage command:
cd ~/compile/nginx_source/nginx-1.12.0-1/
dpkg-buildpackage -b
The nginx Ubuntu package will be saved under ~/compile/nginx_source/. Once package building is complete, please look in the directory:
cd ~/compile/nginx_source/
ls
The Nginx Ubuntu package has been built. And install nginx and modules deb with dpkg command.
dpkg -i *.deb
Testing
Step 1 - Testing with the Nginx Command
Run nginx -V
to check that the ngx_pagespeed module has been built into nginx.
Step 2 - Testing with Curl Command
Go to nginx configuration directory and edit default virtual host configuration file.
cd /etc/nginx/
nano nginx.conf
Paste configuration below to enable ngx_pagespeed.
pagespeed on;
# Needs to exist and be writable by nginx. Use tmpfs for best performance.
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
Save and exit. Next, test the nginx configuration file and make sure there is no error:
nginx -t
Restart nginx:
systemctl restart nginx
Finally, access the nginx web server with the curl command:
curl -I your-ip-address