Hosting Folder in the home directory using nginx

I would like to add a condition in an adduser script to update nginx.conf for it to load ~/www as http://ipaddress/~user whenever I create a new user.

And when a user is named www.domainname it will host that domain name in the ~/www folder.

Is there a script that already does this?


Solution 1:

You don't need to add anything to nginx upon user creation. Simply use something like this in your server block:

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

Check your distributions /etc/skel

if you mkdir /etc/skel/www all userdirs created by adduser (or your distributions adduser-script) will have this directory by default.

Solution 2:

I just stumbled upon this and the accepted answer looks VERY suspicious to me. As Nick ODell pointed out in the comments of the accepted answer, it is probably susceptible to directory traversal attacks.

A better solution is to have a main web root in the server block and then use a symlink from the web root to the user directory. You can have multiple symlinks point to the same target directory:

/var/www/user1 -> /home/user1/www
/var/www/domainname -> /home/user1/www

This type of approach also works better with try_files.