This is an old revision of the document!
NGINX, PageSpeed, Brotli
This guide assumes you are switched to su - . Please note that during the ./configure steps you need to check for missing libraries, this guide assumes you are using the eSG provided installation image.
Goal
Compile nginx with most modules, including support for http2 and pagespeed.
Steps
EXPORTS used to set versions
You can change the values here to change compiled version.
NGINX_VERSION=1.17.9 PS_NGX_EXTRA_FLAGS="--with-ld-opt=-static-libstdc++" HEADERS_VERSION=0.33 NPS_VERSION=latest-stable LIBRESSL_VERSION=3.0.2 OPENSSL_VERSION=1.1.1f
Building Pre requisites
cd ~ mkdir buildnginx cd ~/buildnginx useradd nginx
Library Prerequisites
Centos 7
yum install -y epel-release yum -y groupinstall 'Development Tools' yum -y install gc gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools gperftools-devel libatomic_ops-devel perl-ExtUtils-Embed perl-Digest-SHA1.x86_64 perl-Digest-MD5.x86_64 openssl-devel.x86_64 openssl.x86_64 openssl-libs.x86_64 libuuid-devel
Centos 8
yum install -y epel-release yum -y groupinstall 'Development Tools' yum config-manager --set-enabled PowerTools yum -y install gc gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools gperftools-devel libatomic_ops-devel perl-ExtUtils-Embed perl-Digest-MD5.x86_64 openssl-devel.x86_64 openssl.x86_64 openssl-libs.x86_64 libuuid-devel
Pagespeed Latest Beta
If you would like to build using the latest beta
NPS_VERSION=latest-beta
Fetch nginx
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz tar zxfv nginx-${NGINX_VERSION}.tar.gz
Fetch libressl
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL_VERSION}.tar.gz tar zxfv libressl-${LIBRESSL_VERSION}.tar.gz cd libressl-${LIBRESSL_VERSION} cd ~/buildnginx
Fetch openssl
Optionally you can use openssl instead of libressl.
wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz tar zxfv openssl-${OPENSSL_VERSION}.tar.gz
Fetch Headers_more
wget https://github.com/openresty/headers-more-nginx-module/archive/v${HEADERS_VERSION}.tar.gz -O headers_more-${HEADERS_VERSION}.tar.gz tar zxfv headers_more-${HEADERS_VERSION}.tar.gz
Fetch PageSpeed
wget https://github.com/pagespeed/ngx_pagespeed/archive/${NPS_VERSION}.tar.gz -O pagespeed-${NPS_VERSION}.tar.gz tar zxfv pagespeed-${NPS_VERSION}.tar.gz cd incubator-pagespeed-ngx-${NPS_VERSION}
Fetch PSOL
In order to get the version of PSOL build continue with the steps after this one, while configuring nginx you will get an error message providing the version required. In this example the latest-stable is 1.13.35.2.
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz tar zxfv 1.13.35.2-x64.tar.gz
Latest Beta: 1.13.35.2-beta Check here for latest release: https://modpagespeed.com/doc/release_notes
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz tar zxfv 1.13.35.2-x64.tar.gz
Fetch Brotli
cd ~/buildnginx git clone https://github.com/google/ngx_brotli.git cd ngx_brotli git submodule update --init
Fetch vts
cd ~/buildnginx git clone https://github.com/vozlt/nginx-module-vts.git
Configure NGINX
cd ~/buildnginx cd nginx-${NGINX_VERSION}Choose between the following:
libreSSL
./configure --user=nginx --group=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 --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_xslt_module=dynamic --with-http_image_filter_module --with-http_image_filter_module=dynamic --with-http_geoip_module --with-http_geoip_module=dynamic --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_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module --with-http_perl_module=dynamic --with-mail --with-mail_ssl_module --with-mail=dynamic --with-stream --with-stream=dynamic --with-stream_ssl_module --with-stream_geoip_module --with-stream_geoip_module=dynamic --with-google_perftools_module --with-pcre --with-libatomic --with-http_v2_module --add-module=../incubator-pagespeed-ngx-${NPS_VERSION} ${PS_NGX_EXTRA_FLAGS} ${PS_NGX_EXTRA_FLAGS} --with-openssl=../libressl-${LIBRESSL_VERSION}/ --add-module=../headers-more-nginx-module-${HEADERS_VERSION}/ --add-module=../ngx_brotli --add-module=../nginx-module-vts
openSSL
./configure --user=nginx --group=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 --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_xslt_module=dynamic --with-http_image_filter_module --with-http_image_filter_module=dynamic --with-http_geoip_module --with-http_geoip_module=dynamic --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_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module --with-http_perl_module=dynamic --with-mail --with-mail_ssl_module --with-mail=dynamic --with-stream --with-stream=dynamic --with-stream_ssl_module --with-stream_geoip_module --with-stream_geoip_module=dynamic --with-google_perftools_module --with-pcre --with-libatomic --with-http_v2_module --add-module=../incubator-pagespeed-ngx-${NPS_VERSION} ${PS_NGX_EXTRA_FLAGS} ${PS_NGX_EXTRA_FLAGS} --with-openssl=../openssl-${OPENSSL_VERSION}/ --add-module=../headers-more-nginx-module-${HEADERS_VERSION}/ --add-module=../ngx_brotli
Build NGINX
make
Install NGINX
make install
Setup Steps
Setup the systemd service
Setup the pid directory creation
echo "d /var/run/nginx 755 root root" > /usr/lib/tmpfiles.d/nginx.conf
Edit nginx.conf
pid /var/run/nginx/nginx.pid; user nginx nginx;
Create temp folder on boot
Used for the pid file
vim /usr/lib/tmpfiles.d/nginx.conf
d /var/run/nginx 755 root root