How to Configure Nginx UserDir in Ubuntu Linux

This post describes steps you can take to create a UserDir feature with Nginx HTTP server in Ubuntu Linux.

Like Apache2 UserDir module, Nginx can also be configured to do the same, albeit in a different way.

In some school environments, you’ll see examples where teachers are given their own website to publish materials for students to access. Instead of having to create multiple server blocks, system administrator can use the UserDir feature to accomplish this.

The URL to reach the teacher’s page is usually the domain name followed by /~teacher_name.

User Directory or Userdir for short is a feature for Nginx web server that allows user-specific directories to be accessed via Nginx. 

For example, when you enable this feature in Nginx, users with accounts on the system will be able to share content in their home directories with the world via Nginx.

This tutorial assumes that you already have Nginx web server installed. If you haven’t, you may want to do that before continuing below.

Step 1: Install Nginx HTTP Server

First, run the commands below to install Nginx HTTP Server on Ubuntu

sudo apt install nginx

Step 2: Setup UserDir on Nginx

Unlike Apache2, there are no module to enable or installed. Nginx implementation is a bit different.

To enable Nginx Userdir feature, open the default website configuration file. or create a new one for the domain you want to have user share their directories.

The commands below opens Nginx default site configuration file.

sudo nano /etc/nginx/sites-available/default

Then add the highlighted block of code the settings below:

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
        server_name example.com www.example.com;

         location ~ ^/~(.+?)(/.*)?$ {
         alias /home/$1/public_html$2;
         index index.html index.htm;
         autoindex on;
           }

}

Step 3: Creating User Directories

Now that the feature is enabled, all users have to do is run the commands below to create a folder in their home directories called public_html by running the commands below.

mkdir ~/public_html

In the ~/public_html folder, create html documents to be shared and accessed via the webserver.

Restart Nginx webserver to load the settings.

sudo systemctl restart nginx.service

Now test it out by browsing to the server hostname or IP address followed by the username.

example:

apache2 user dir

This is how Nginx Userdir feature is configured for users to allow users with accounts on the systems to share content from their home directories.

That’s it!