Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@AJMaxwell
Last active September 12, 2021 20:57
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save AJMaxwell/f6793605068813aae888216b02364d85 to your computer and use it in GitHub Desktop.
Save AJMaxwell/f6793605068813aae888216b02364d85 to your computer and use it in GitHub Desktop.
Install Nginx, OpenSSL, and ngx_pagespeed from source on Ubuntu 14.04
#!/bin/bash
##############################################################################################
## Install Nginx with OpenSSL, and ngx_pagespeed
##
## Author: Andrew Maxwell <amaxwell@ajmaxwell.com>
## Date: 2017/09/18
## Version: 0.3
##
## Disclaimer: I am not responsible for how you use this script. Do not assume this script
## will work in all envrionments or any Ubuntu version other than 14.04. This script assumes
## you have had a version of nginx already installed from Ubuntu PPAs and that it has been
## removed via `sudo apt-get remove nginx nginx-common`
##
##############################################################################################
# Versions of nginx, openssl, and ngx_pagespeed you want to install
NGINX_VERSION=1.12.1
OPENSSL_VERSION=1.0.2l
NPS_VERSION=1.12.34.2-stable
## Get currently installed version of openssl
OPENSSL_CURRENT_VERSION=$(openssl version | awk '{ print $2 }')
# Customize the general nginx flags
NGINX_FLAGS="--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --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 --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_realip_module --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-file-aio --with-pcre --with-ipv6 --with-http_v2_module --with-image_filter_module"
# Customize the openssl nginx flags
OPENSSL_FLAGS="--with-openssl=/usr/local/src/openssl-${OPENSSL_VERSION}"
# Customize the ngx_pagespeed nginx flags
NPS_FLAGS="--add-module=/usr/local/src/ngx_pagespeed-${NPS_VERSION}"
# Customize various 'security' related nginx flags
SECURITY_FLAGS="--without-http_ssi_module --without-http_scgi_module --without-http_uwsgi_module --without-http_autoindex_module"
##############################################################################################
########## STOP EDITING
##############################################################################################
NGINX_CONFIG="${NGINX_FLAGS} ${OPENSSL_FLAGS} ${NPS_FLAGS} ${SECURITY_FLAGS} --with-cc-opt='-g' --with-ld-opt='-Wl,-Bsymbolic-functions'"
# Install dependencies
sudo apt-get update
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev
# Ensure /usr/local/src is writeable by current user, then enter that directory
sudo chmod +w /usr/local/src
cd /usr/local/src
## Download sources
# Download nginx
wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -O nginx-${NGINX_VERSION}.tar.gz
# Download openssl
wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz -O openssl-${OPENSSL_VERSION}.tar.gz
# Download ngx_pagespeed
wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}.tar.gz -O v${NPS_VERSION}.tar.gz
## Extract sources
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
tar -xvzf openssl-${OPENSSL_VERSION}.tar.gz
tar -xvzf v${NPS_VERSION}.tar.gz
## Download and Extract PSOL (PageSpeed Optimization Library)
cd ngx_pagespeed-${NPS_VERSION}/
NPS_RELEASE_NUMBER=${NPS_VERSION/beta/}
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
PSOL_URL=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz
[ -e scripts/format_binary_url.sh ] && PSOL_URL=$(scripts/formate_binary_url.sh PSOL_BINARY_URL)
wget ${PSOL_URL}
tar -xvzf $(basename ${PSOL_URL})
## Install openssl\
cd ../openssl-${OPENSSL_VERSION}
./config
make depend
make
make test
# Move old OpenSSL files if they exist
sudo mv /usr/bin/openssl /usr/bin/openssl_${OPENSSL_CURRENT_VERSION}
# If you prefer to install straight from source
#sudo make install
# If you prefer to create a .deb file and use your package manager
sudo checkinstall
sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
## Install nginx + modules
cd ../nginx-${NGINX_VERSION}
# PageSpeed Cache
sudo mkdir -p /var/cache/pagespeed
# nginx cache
sudo mkdir -p /var/cache/nginx/{client_temp,fastcgi_temp,proxy_temp}
# nginx logs
sudo mkdir -p /var/log/nginx
sudo touch /var/log/nginx/{error,access}.log
./configure ${NGINX_CONFIG}
make
# If you prefer to install straight from source
#sudo make install
# If you prefer to create a .deb file and use your package manager
sudo checkinstall
#cd ..
# Download nginx startup script and make executable
sudo wget https://gist.githubusercontent.com/AJMaxwell/2c06c3704fac46d14939419c8ad1807e/raw/f8818e55b28ff8fa12531d7d7220c5c48de9eba3/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
# Add nginx to system startup
sudo /usr/sbin/update-rc.d -f nginx defaults
echo "Installation Complete!"
@AJMaxwell
Copy link
Author

AJMaxwell commented Sep 18, 2017

Thanks for the feedback everyone! I have just updated the script.

Changes:

  • Moved the source files to /usr/local/src
  • Updated version numbers
  • Tweaked $NGINX_FLAGS
  • Added missing Nginx cache directory to mkdir
  • New PageSpeed installation process

This script was made to run on Ubuntu 14.04; if you need it to run on 16.04, see @arvin-foroutan's comment.

@elephantux
Copy link

elephantux commented Sep 19, 2017

Can't understand...

# nginx -v
The program 'nginx' can be found in the following packages:
 * nginx-core
 * nginx-extras
 * nginx-full
 * nginx-light
 * nginx-naxsi
Try: apt-get install <selected package>

sudo service nginx start
return nothing and service don't start

How to start/stop/restart nginx?

@AJMaxwell
Copy link
Author

@elephantux Are you on Ubuntu 14.04? If you're running 16.04, checkout @arvin-foroutan's comment.

@zhex900
Copy link

zhex900 commented Feb 9, 2018

./configure: error: no /root/ngx_pagespeed-1.12.34.2-beta/config was found
make: *** No rule to make target 'build', needed by 'default'. Stop.
make: *** No rule to make target 'install'. Stop.
Installation Complete!

I tried to run this script in ubuntu:xenial container

@zhex900
Copy link

zhex900 commented Feb 9, 2018

pagespeed download file changed its name to incubator-pagespeed-ngx-1.12.34.2-beta. But I still get errors:
ngx_pagespeed: pagespeed optimization library not found:
./configure: 31: /root/ngx_pagespeed-1.12.34.2-beta/config: [[: not found

You need to separately download the pagespeed library:
$ cd /root/ngx_pagespeed-1.12.34.2-beta
$ wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
$ tar -xzvf 1.12.34.2-x64.tar.gz # expands to psol/

Or see the installation instructions:
https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source
make: *** No rule to make target 'build', needed by 'default'. Stop.
make: *** No rule to make target 'install'. Stop.
Installation Complete!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment