How to Install Nginx from Source on Ubuntu

Written by: Bagus Facsi Aginsa
Published at: 26 Feb 2022

Nginx is very easy to install if we install it from a package manager like apt on Ubuntu or yum in CentOS. It is good for a general proposed load balancer, reverse proxy, and web server. But sometimes we need additional modules to add more function to Nginx that is not included in default installation from the package manager. If that is the case, you need to install the Nginx from source. In this tutorial, we will guide you step by step on how to install Nginx from source on ubuntu.

Sudo Privileges

Before starting, make sure that we have no permission issue on the installation & configuration.

sudo su

Install Dependencies

Run this command to install Nginx dependencies

apt update -y && apt-get install git build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev

Download Nginx Source Code

Before you download the Nginx source code, you can visit to see the Nginx version available now. After that you can download them by running this command:


Now, the latest stable version is 1.20.2, so for me, I will download the nginx-1.20.2 version


Extract the downloaded file

tar -zxvf nginx-1.20.2.tar.gz

Build & Install Nginx

After extract the file, go to the nginx directory

cd nginx-1.20.2

Now is the time to configure Nginx that suits your need, this is where you put in the module you want to include in Nginx using the ./configure command. The full documentation is in here: Building Nginx from Sources. For now, I will give you the minimum configure option so you can build a good load balancer, reverse proxy, or webserver. Run this command to configure Nginx:

./configure \
    --prefix=/etc/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=/run/ \
    --sbin-path=/usr/sbin/nginx \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_stub_status_module \
    --with-http_realip_module \
    --with-file-aio \
    --with-threads \
    --with-stream \

After that, run this command to build & install the Nginx

make && make install

To verify the installation, you can check the Nginx version

nginx -V

Also notice that the Nginx folder will be created at /etc/nginx that provide the default nginx.conf and other file.

As I mentioned before that you need to configure nginx that suits your need. If you already have a use case in mind, you can check my other article that take advantage of nginx built from source:

  1. Multi Domain Configuration in Layer 4 Nginx Load Balancer
  2. Build an Adaptive Bitrate Streaming Server Using Nginx on Ubuntu
  3. Adaptive Bitrate VoD Server using Nginx on Ubuntu

Create Systemd File

To make Nginx easier to manage, we can build a systemd file. First, create a new file in the systemd folder:

nano /lib/systemd/system/nginx.service

And then copy & paste this config to the file

Description=Nginx Custom From Source

ExecStartPre=/usr/sbin/nginx -t
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID


Reload the systemd

systemctl daemon-reload

Enable Nginx service so it will auto start when the server boot

systemctl enable nginx

Now you can control Nginx using systemd, just like this:

service nginx start
service nginx stop
service nginx reload
service nginx restart

Create Logrotate File

Logrotate is useful for rotating the Nginx log so it will not write on a single file continuously. First, create a new file on the logrotate folder

nano /etc/logrotate.d/nginx

Copy & Paster this code

/var/log/nginx/*.log {
    rotate 7
    create 0640 root root
            if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                    run-parts /etc/logrotate.d/httpd-prerotate; \
            fi \
            invoke-rc.d nginx rotate >/dev/null 2>&1

Final Check

To tell that the overall installation success, you can check the Nginx webserver is working or not by starting the Nginx service.

service nginx start

Check the status

service nginx status

Visit your Nginx server from your browser


You should see the default Nginx landing page like this:

Nginx default landing page

That’s it! Now you can install your own Nginx from source and put in modules that you want to include in Nginx.