Setup Apache2 Userdir Module on Ubuntu 16.04 LTS Servers

In most school environments is where you get to see Apache2 Userdir in action… each teacher is given his/her own website where he/she can publish materials for students to access… 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 module for Apache2 web server that allows user-specific directories to be accessed via Apache2. For example, when you enable this feature in Apache2, users with accounts on the system will be able to share content in their home directories with the world via Apache2..

This brief tutorial shows students and new users how to enable and configure it on Ubuntu 16.04 LTS Servers using Apache2…

To get started with enabling Userdir on Ubuntu 16.04 LTS, the steps below is a good place to start:

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

Step 1: Install Apache2 HTTP Server

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

sudo apt install apache2

Step 2: Enabling Userdir on Apache2

To enable Userdir module for Apache2 webservers, run the commands below

sudo a2enmod userdir

After running the commands above the feature will be enabled and ready to be used. The configuration file is at /etc/apache2/mods-enabled/userdir.conf. But you don’t have to do anything. It’s already configured with the best options.

To access the config file, run the commands below

sudo nano /etc/apache2/mods-available/userdir.conf

Then validate the settings below:

<IfModule mod_userdir.c>
     UserDir public_html
     UserDir disabled root

        <Directory /home/*/public_html>
             AllowOverride FileInfo AuthConfig Limit Indexes
             Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
             Require method GET POST OPTIONS
        </Directory>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

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 Apache2 webserver to load the settings.

sudo systemctl restart apache2.service

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

example: http://example.com/~richard

apache2 user dir

 

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

That’s it!

Enjoy!

You may also like the post below:

Get TYPO3 on Ubuntu 16.04 LTS with Apache2, MariaDB and PHP 7.1 Support

2 Replies to “Setup Apache2 Userdir Module on Ubuntu 16.04 LTS Servers

  1. I tried your setting, but PHP and htaccess doesn’t by this way.
    PHP work correctly in the localhost (phpmyadmin work, phpinfo work). But PHP doesn’t work in the home directory !?
    What’s wrong ???
    Thanks

  2. Serving PHP files from user’s public_html directoriy is disabled by default for security reasons. If you want to enable PHP processing when using userdir this is what you need to do. First you edit following Apache configuration file in this way:

    sudo nano /etc/apache2/mods-available/php5.conf
    Now you need to comment out a few lines from to the next so you get something like this:

    SetHandler application/x-httpd-php

    SetHandler application/x-httpd-php-source

    # To re-enable php in user directories comment the following lines
    # (from to .) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    #
    #
    # php_admin_value engine Off
    #
    #

    Last thing you just restart Apache web server and create public_html directory inside your home directory like this:

    sudo service apache2 restart
    mkdir /home/$USER/public_html

    That’s it and every user on your PC should be able to serve PHP pages from his /home/username/public_html directory, and that pages should be accessible on http://127.0.0.1/~username/ address. Now you can develop for web using public_html to store and test your PHP and HTML code.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.