Nginx with ngx_pagespeed on CentOS
This tutorial shows, how you can install NGINX with ngx_pagespeed.
Ngx-pagespeed is a open source Nginx module that can be used to speeds up your site and reduces page load time. It works by automatically applying web performance best practices to pages and associated assets without requiring you to modify your existing workflow.
Step 1 – Update your System
Update your system to the latest stable version by using the following command :
sudo yum update -y
After the system update, restart the system and login with sudo user.
Step 2 – Install the Dependencies
Install packages in order to compile Nginx. You can install all these dependencies by running the following command:
sudo yum install gcc cmake unzip wget gcc-c++ pcre-devel zlib-devel -y
Step 3 – Compile Nginx with Ngx-pagespeed
To install Nginx with ngx-pagespeed module you will need to compile Nginx from source. First, you will need to download the Nginx source so use the following command :
wget http://nginx.org/download/nginx-1.12.0.tar.gz
To compile Nginx with ngx_pagespeed module, you will also need to download ngx_pagespeed source package.Use the below command :
wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
Once both packages are download, Extract them with the following command:
tar -xvzf nginx-1.12.0.tar.gz tar -xvzf v1.12.34.2-stable.zip
Download the PageSpeed optimization libraries to compile Nginx. Use the below command to download the PageSpeed optimization libraries :
cd ngx_pagespeed-1.12.34.2-stable wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz tar -xvzf 1.12.34.2-x64.tar.gz cd ..
Now, let’s start to compile Nginx with the pagespeed module.
First, change the directory to the Nginx source directory with the following command:
cd nginx-1.12.0
Next, configure the Nginx source with the following command:
sudo ./configure --add-module=$HOME/ngx_pagespeed-1.12.34.2-stable --user=nobody --group=nobody --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}
Once the configuration is completed, compile Nginx by running the following command:
sudo make
After that you can install nginx by running the following command:
sudo make install
Once Nginx is installed, you will need to create a symlink for the Nginx:
sudo ln -s /usr/local/nginx/conf/ /etc/nginx sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
Step 4 – Create Nginx Startup Script
You will also need to create a startup script for Nginx to stop and start Nginx. You can do this by creating nginx file inside /etc/init.d directory:
sudo nano /etc/init.d/nginx
Add the following lines:
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -n "$user" ]; then if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done fi } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
Save and close the file when you are finished, then give execution permission to it:
sudo chmod +x /etc/init.d/nginx
Now, start nginx service and enable it to start on boot time with the following command:
sudo systemctl start nginx sudo systemctl enable nginx
Once you are done, you can proceed to the next step.
Step 5 – Configure Nginx
Now, Nginx is installed with ngx-pagespeed support. By default PageSpeed is disabled. Before enable it, it is recommended to test your website speed. Next, you will need to create a cache directory for ngx-pagespeed and also assign ownership for it to Nginx:
sudo mkdir -p /var/ngx_pagespeed_cache sudo chown -R nobody:nobody /var/ngx_pagespeed_cache
Next, you will need to make some changes in /etc/nginx/nginx.conf file. Run the following command:
sudo nano /etc/nginx/nginx.conf
Add the following code between the server block:
# Pagespeed main settings pagespeed on; 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 ~ "^/ngx_pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon" { }
Note: If you are using virtual hosting then add the above pagespeed directives to each server block config file to enable pagespeed on each website.
Save and close the file when you are finished, check the Nginx for any configuration error with the following command:
sudo nginx -t
You should see the following output:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Finally, restart Nginx for the changes to take effect:
sudo systemctl restart nginx
Once Nginx is configured, you can proceed to test Ngx-pagespeed.
Step 6 – Test Ngx-pagespeed
Nginx is now up and running.You can check it by running the following command:
curl -I -p http://localhost
The output will be as follows:
HTTP/1.1 200 OK Server: nginx/1.12.0 Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding Date: Wed, 21 Jun 2017 17:21:08 GMT X-Page-Speed: 1.12.34.2-0 Cache-Control: max-age=0, no-cache
You should see X-Page-Speed and it’s version number in the above output.
You have successfully installed Ngx_pagespeed on your server.