• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
sharadchhetri

sharadchhetri

Tutorials On Linux, Unix & Open Source

  • Home
  • Linux Commands
  • Resources
    • Learn Linux
  • My WordPress plugins

Install Nginx from source code on Ubuntu 14.04 LTS

February 21, 2015 by Sharad Chhetri

Nginx, it is one of the awesome open source package which is used for webserver, loadbalancer, reverse proxy server for HTTP, HTTPS, SMTP, POP3, IMAP and HTTP cache server . It is best known for handling the C10K problem .

In this post we are writing on , how to install Nginx from source code on Ubuntu 14.04 LTS . We will use it basically for web server which is its actual origin.

Install Nginx from source code on Ubuntu 14.04 LTS server

Follow the given below steps to install Nginx from source code on Ubuntu 14.04 LTS server.

login as Super User

login as super user on system.

sudo su -

Download the Nginx source code

We will suggest you to always use latest available stable version. You can download the nginx source code from Nginx.org download page.

Here we are using curl command to download the current available latest package.

curl -O http://nginx.org/download/nginx-1.6.2.tar.gz

Add nginx user

Use below given command to add nginx user with nologin shell.

useradd -s /sbin/nologin nginx

Install dependency packages

Here, we are going to enable and use most of the module in Nginx. Hence, we are installing all the dependency packages.

apt-get install build-essential libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base openssl libssl-dev  libgeoip1 libgeoip-dev  google-perftools libgoogle-perftools-dev libperl-dev  libgd2-xpm-dev libatomic-ops-dev libxml2-dev libxslt1-dev python-dev

Untar the nginx source code

Now untar the downloaded nginx source code.
Note: replace the nginx package name if you have different nginx source code version.

tar -xvzf nginx-1.6.2.tar.gz

It will extract out the Nginx directory. In our case, the directory name is nginx-1.6.2 .

Compiling Nginx source code

First change to directory extracted out from nginx tar ball.

cd nginx-1.6.2/

Now compile the Nginx source code.

./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 --pid-path=/var/run/nginx.pid  --with-rtsig_module --with-select_module --with-poll_module --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_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_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-cpp_test_module  --with-cpu-opt=CPU --with-pcre  --with-pcre-jit  --with-md5-asm  --with-sha1-asm  --with-zlib-asm=CPU --with-libatomic --with-debug --with-ld-opt="-Wl,-E"

Now make and install the source code.

make && make install

The nginx installation is successfully done here. Now we have to create nginx daemon file which will be used for nginx service start,stop,status,reload,restart .

Create Nginx Daemon file

Create a new file called nginx inside /etc/init.d

vi /etc/init.d/nginx

And paste the below given code

#! /bin/bash

. /lib/lsb/init-functions
 
#------------------------------------------------------------------------------
#                               Consts
#------------------------------------------------------------------------------
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/
DAEMON=/usr/sbin/nginx
 
PS="nginx"
PIDNAME="nginx"				#lets you do $PS-slave
PIDFILE=$PIDNAME.pid                    #pid file
PIDSPATH=/var/run
 
DESCRIPTION="Nginx Server version 1.6.2"
 
RUNAS=root                              #user to run as
 
SCRIPT_OK=0                             #ala error codes
SCRIPT_ERROR=1                          #ala error codes
TRUE=1                                  #boolean
FALSE=0                                 #boolean
 
lockfile=/var/lock/subsys/nginx
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
#------------------------------------------------------------------------------
#                               Simple Tests
#------------------------------------------------------------------------------
 
#test if nginx is a file and executable
test -x $DAEMON || exit 0
 
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi
 
#set exit condition
#set -e
 
#------------------------------------------------------------------------------
#                               Functions
#------------------------------------------------------------------------------
 
setFilePerms(){
 
        if [ -f $PIDSPATH/$PIDFILE ]; then
                chmod 400 $PIDSPATH/$PIDFILE
        fi
}
 
configtest() {
	$DAEMON -t -c $NGINX_CONF_FILE
}
 
getPSCount() {
	return `pgrep -f $PS | wc -l`
}
 
isRunning() {
        if [ $1 ]; then
                pidof_daemon $1
                PID=$?
 
                if [ $PID -gt 0 ]; then
                        return 1
                else
                        return 0
                fi
        else
                pidof_daemon
                PID=$?
 
                if [ $PID -gt 0 ]; then
                        return 1
                else
                        return 0
                fi
        fi
}
 
#courtesy of php-fpm
wait_for_pid () {
        try=0
 
        while test $try -lt 35 ; do
 
                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
 
                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac
 
                #echo -n .
                try=`expr $try + 1`
                sleep 1
        done
}
 
status(){
	isRunning
	isAlive=$?
 
	if [ "${isAlive}" -eq $TRUE ]; then
                echo "$PIDNAME found running with processes:  `pidof $PS`"
        else
                echo "$PIDNAME is NOT running."
        fi
 
 
}
 
removePIDFile(){
	if [ $1 ]; then
                if [ -f $1 ]; then
        	        rm -f $1
	        fi
        else
		#Do default removal
		if [ -f $PIDSPATH/$PIDFILE ]; then
        	        rm -f $PIDSPATH/$PIDFILE
	        fi
        fi
}
 
start() {
        log_daemon_msg "Starting $DESCRIPTION"
 
	isRunning
	isAlive=$?
 
        if [ "${isAlive}" -eq $TRUE ]; then
                log_end_msg $SCRIPT_ERROR
        else
                start-stop-daemon --start --quiet --chuid $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON 
                -- -c $NGINX_CONF_FILE
                setFilePerms
                log_end_msg $SCRIPT_OK
        fi
}
 
stop() {
	log_daemon_msg "Stopping $DESCRIPTION"
 
	isRunning
	isAlive=$?
        if [ "${isAlive}" -eq $TRUE ]; then
                start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE
 
		wait_for_pid 'removed' $PIDSPATH/$PIDFILE
 
                if [ -n "$try" ] ; then
                        log_end_msg $SCRIPT_ERROR
                else
                        removePIDFile
	                log_end_msg $SCRIPT_OK
                fi
 
        else
                log_end_msg $SCRIPT_ERROR
        fi
}
 
reload() {
	configtest || return $?
 
	log_daemon_msg "Reloading (via HUP) $DESCRIPTION"
 
        isRunning
        if [ $? -eq $TRUE ]; then
		`killall -HUP $PS` #to be safe
 
                log_end_msg $SCRIPT_OK
        else
                log_end_msg $SCRIPT_ERROR
        fi
}
 
quietupgrade() {
	log_daemon_msg "Peforming Quiet Upgrade $DESCRIPTION"
 
        isRunning
        isAlive=$?
        if [ "${isAlive}" -eq $TRUE ]; then
		kill -USR2 `cat $PIDSPATH/$PIDFILE`
		kill -WINCH `cat $PIDSPATH/$PIDFILE.oldbin`
 
		isRunning
		isAlive=$?
		if [ "${isAlive}" -eq $TRUE ]; then
			kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
			wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
                        removePIDFile $PIDSPATH/$PIDFILE.oldbin
 
			log_end_msg $SCRIPT_OK
		else
			log_end_msg $SCRIPT_ERROR
 
			log_daemon_msg "ERROR! Reverting back to original $DESCRIPTION"
 
			kill -HUP `cat $PIDSPATH/$PIDFILE`
			kill -TERM `cat $PIDSPATH/$PIDFILE.oldbin`
			kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin`
 
			wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin
                        removePIDFile $PIDSPATH/$PIDFILE.oldbin
 
			log_end_msg $SCRIPT_ok
		fi
        else
                log_end_msg $SCRIPT_ERROR
        fi
}
 
terminate() {
        log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"
 
	PIDS=`pidof $PS` || true
 
	[ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
 
	for i in $PIDS; do
		if [ "$i" = "$PIDS2" ]; then
	        	kill $i
                        wait_for_pid 'removed' $PIDSPATH/$PIDFILE
			removePIDFile
		fi
	done
 
	log_end_msg $SCRIPT_OK
}
 
destroy() {
	log_daemon_msg "Force terminating and may include self (via KILLALL) $DESCRIPTION"
	killall $PS -q >> /dev/null 2>&1
	log_end_msg $SCRIPT_OK
}
 
pidof_daemon() {
    PIDS=`pidof $PS` || true
 
    [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
 
    for i in $PIDS; do
        if [ "$i" = "$PIDS2" ]; then
            return 1
        fi
    done
    return 0
}
 
case "$1" in
  start)
	start
        ;;
  stop)
	stop
        ;;
  restart|force-reload)
	stop
	sleep 1
	start
        ;;
  reload)
	$1
	;;
  status)
	status
	;;
  configtest)
        $1
        ;;
  quietupgrade)
	$1
	;;
  terminate)
	$1
	;;
  destroy)
	$1
	;;
  *)
	FULLPATH=/etc/init.d/$PS
	echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}"
	echo "       The 'destroy' command should only be used as a last resort." 
	exit 1
	;;
esac
 
exit 0

Save and exit from file.

To make it executable, give the executable permission to nginx daemon file.

chmod +x /etc/init.d/nginx

How to start/stop/status of Nginx service

To start the nginx service, use the command –

/etc/init.d/nginx start

To stop the nginx service, use the command –

/etc/init.d/nginx stop

To check status the nginx service, use the command –

/etc/init.d/nginx status

Use –help argument , to know about more usage of nginx daemon script . Given below is reference from our system.

root@web:~# /etc/init.d/nginx --help
Usage: /etc/init.d/nginx {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}
       The 'destroy' command should only be used as a last resort.
root@web:~#

Check Web Server

To check web server accessible on port 80, open the web browser and type the ip address or hostname of web server in URL field.

http://ip-address-of-web-server

It will show the welcome page.

Nginx

Share this:

  • Twitter
  • Facebook
  • More
  • Print
  • Email
  • LinkedIn
  • Reddit
  • Tumblr
  • Pinterest
  • Pocket
  • Telegram
  • WhatsApp
  • Mastodon

Related posts:

  1. Remove python module installed from source code on Linux
  2. How to install nginx webserver from source on CentOS and RHEL
  3. How to install nginx from source on CentOS 7
  4. How to install Nagios 4 from source on Ubuntu 14.04 LTS
  5. Install Cacti from source on Ubuntu 14.04 LTS Server
  6. Install osTicket ( Open source ticketing tool ) on Ubuntu 14.04 LTS
  7. Can’t load ‘/usr/local/lib64/perl5/auto/nginx/nginx.so’
  8. Install and compile nginx 1.14 on Ubuntu 18.04 LTS server
  9. How To Install Nginx On Ubuntu 22.04 LTS
  10. Install redis 3.0 from source on Ubuntu 14.04 / CentOS 7 / RHEL 7

Filed Under: Linux Tagged With: nginx, ubuntu 14.04

Reader Interactions

Comments

  1. alex says

    May 25, 2017 at 6:59 am

    how can we uninstall nginx if this steps we had followed .

    • Sharad Chhetri says

      May 25, 2017 at 5:36 pm

      Hi alex,
      Run command, find / -name nginx.
      Above command’s output will help you to get nginx files/dir path then remove these nginx file/dir.

      Regards
      Sharad

  2. RiseEarly says

    November 16, 2016 at 7:28 am

    Thanks for the post .. it really helped us.

  3. goliney says

    February 27, 2016 at 5:59 pm

    Thanks for article. Helped me install nginx with secure_link

    • sharad chhetri says

      February 28, 2016 at 1:27 am

      Thank You Sergey,

      Appreciate for investing your time on giving us the feedback.

      Regards
      Sharad

  4. Nam Nguyen says

    August 28, 2015 at 4:55 am

    I have a cookbook to compile and install from source: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/cookbooks/nginx/recipes/install.bash

  5. Sunny Gupta says

    August 21, 2015 at 6:52 am

    Hey Sharad,

    Nice Article about the installation. I wanted 1to ask you that after once i properly installed [like right now Nginx running], i wanted to install a 3rd 1party module. Do i need to mention all the parameter like with , without params or should i mention the basic params like conf, prefix, sbin and –add-module to add whatever module i wanted to add?

    • sharad chhetri says

      August 21, 2015 at 4:17 pm

      Hello Sunny,

      Nice to see your comment and appreciate for your projects which you worked on.
      For 3rd party module installation or any module installation, we have to install with all parameters.Only you have to one line with ./configure that is --add-module=/path/to/module1/source . (Reference : http://wiki.nginx.org/3rdPartyModules )

      If still have confusion, please do let me know.

      Best Regards
      Sharad

  6. Albert says

    July 20, 2015 at 11:41 am

    Hey dude! Very nice tutorial! Veeeery helpful! Thanks for share!

    I have a question: Could you make a Nginx tutorial with Owncloud 8?

    I have a some problems with music and stream video with Nginx & OC8. It would be nice to learn how to configure it. I have long been trying and do not know what to do. Even looking at the official documentation.

    • sharad chhetri says

      July 20, 2015 at 2:43 pm

      Hello Albert,

      Glad to know the tutorial helped you. The feedback is crucial for other readers.
      I will try.

      Regards
      Sharad

      • Albert says

        July 27, 2015 at 4:33 pm

        Thank you for your time Sharad.

        I keep trying by myself, but no way. Even PHP gives me problems to configure.

        I hope you can help me.

        Regards.

        Albert.

        • sharad chhetri says

          July 27, 2015 at 5:11 pm

          Hello Albert,

          You have to work around with php-fpm along with nginx for this.

          Regards
          Sharad

Primary Sidebar

Our Social Media Presence

  • Facebook
  • GitHub
  • Twitter

Linux Command

What is Linux Internal And External Command

Linux Basic Commands With Examples For Every Beginner

tr command to convert lines to space , tab and vertical tab

smbpasswd command not found on CentOS 7 and RHEL 7

Solution : semanage command not found

Unix / Linux : How to print duplicate lines from file

More Posts from this Category

You Might Like These Articles!

simplecodesyntax wordpress plugin

SimpleCodeSyntax : My Another WordPress Plugin

Install Nginx

How To Install Nginx On Ubuntu 22.04 LTS

Install Latest Git package in Ubuntu Operating System

How To Always Install Latest Git Package In Ubuntu Operating System

Bash script for installing VirtualBox on Ubuntu 22.04 LTS Desktop

Install VirtualBox On Ubuntu 22.04 LTS Desktop (Bash Script)

libfuse

dlopen(): error loading libfuse.so.2 – Got Error On Ubuntu

Failed to open/create the internal network

VirtualBox Error: Failed to open/create the internal network

Always Useful Tips And Tricks

How to convert float to integer number

configure: error: C++ compiler cannot create executables

How to install pam_mysql in CentOS or Red Hat

How to zip the directory in linux with command line

How to convert rpm file into deb file

Print double hyphen sign simultaneously in post of Octopress

Could not find make anywhere!!! Please edit the config section to include the path to make. at ./install.pl line 2101

Explore 90+ Article On "Linux Tips And Tricks"

Copyright © 2023 ยท
The material in this site cannot be republished either online or offline, without our permission.
Proudly Blogging From Bharat.

  • Contact
  • About Me
  • My WordPress plugins
  • Privacy Policy