Tried and true Nginx init script - got enhancements? Send a pull!
Switch branches/tags
Nothing to show
Pull request Compare This branch is 17 commits behind JasonGiedymin:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Tried and true Nginx init script.

Ubuntu, Vagrant, and Docker tested!

Author: Jason Giedymin <jasong -at- apache -=dot=- org>

Check out my other repos!


Rest assured that this repo will be maintained indefinitely beyond Ubuntu LTS and systemd adoption into Ubuntu stable.

Last tested with:

  1. Ubuntu 12.xx & 13.xx
  2. nginx-1.5.9 - should also work with 1.6.xx series, just haven't tested it yet.


It is recommended to install Nginx by doing a full compile & build. Not all package repositories keep their branches updated. For security it is your duty to maintain a good working environment and thus includes all interfacing applications. This script works turn-key with the default compile of nginx. It is fully recommended that you go through the variables contained within this script if you have a custom compiled build.

A great resource is the Nginx Wiki.

Basic Install

Basic install instructions, use sudo if necessary for the below (depends on your setup/security).

# [optional as you may have these installed]
sudo apt-get install libpcre3-dev zlib1g-dev

mkdir -p ~/temp/nginx-install
cd ~/temp/nginx-install

# download/curl/wget nginx 
tar -xvf nginx-1.5.9.tar.gz
cd nginx-1.5.9/
sudo make install

#copy/download/curl/wget the init script
sudo wget -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx

service nginx status  # to poll for current status
service nginx stop    # to stop any servers if any
service nginx start   # to start the server

sudo update-rc.d -f nginx defaults

#[optional remove the upstart script]
sudo update-rc.d -f nginx remove

Advanced Configuration

If you need to override the values within the script you should use /etc/default/nginx.

You can override any of these values:

  • PATH
  • PS
  • lockfile

For instance, if you needed to change the description of the server during logging:

# Edit [/etc/default/nginx] and add the below line
DESCRIPTION="My Awesome Nginx Server..."

# Next run the below command:
sudo service nginx restart

# Output of running restart with nginx defaults file:
* Stopping My Super Nginx Server...                                  [ OK ] 
* Starting My Super Nginx Server...                                  [ OK ]

# Notice that is says "My Super Nginx Server..." as opposed to the default
# "Nginx Server...".

The NGINXPATH value should point to your installation of Nginx, the default is /usr/local/nginx

It's likely you'll need to update the NGINXPATH value if you didn't install from source. Eg, if you install Nginx using apt-get on Ubuntu nginx will be installed to /etc/nginx

# Changing NGINXPATH when Nginx was installed with apt-get


Tests run as part of the deployment scripts integration-tests.yml.

To start make sure you have vagrant, and ansible installed.

Download the Ubuntu base box:

vagrant box add

Run vagrant:

vagrant up

Manually provision again:

vagrant provision

Using with Docker

A basic Dockerfile will arrive shortly for testing, but note that I focued my efforts on creating an nginx ansible role. This repo has a Dockerfile which will install Nginx along with nginx-init-ubuntu (this repo) using ansible. Until the basic testing Dockerfile is in place here please refer to the ansible role and it's Dockerfile -- if your looking for stability.

If your looking for a more production and developer friendly Dockerfile, look here.

When using the ansible role mentioned above you will need to set nginx_docker_override to True as the role will detect if running within a Dockerfile. This is to prevent nginx running in daemon mode.

A copy of nginx-init-ubuntu is present in the ansible role role.


Contributions are welcome!