Setup apache for a multi user shared hosting environment
Posted on: 15 October 2014 /
Categories:
Basic setup of a multi user hosting environment on Ubuntu or Debian.
This is a very simple, minimal and safe setup which allows users to have their own web sites hosted in a central web server. The main advantage of this method is that it is very secure.
- The main features of this setup are the following:
- Each user has his own home directory
- Each user can have one or more websites hosted
- Web server does not need extra configuration regarding users, groups etc.
- Users are owners of their website(s) and can connect and modify their sites at will.
- Users can only view the web directories that they own.
- Simple and fast setup
Steps
- Login as root
sudo su -
- Create user with his own home dir
useradd -s /bin/bash -m -d /home/<username> <username>
- Assign a password to the user
passwd <username>
- Create virtual host’s directory and set permission to user and group.
mkdir -m o-rwx /var/vhosts/<site>
- Change ownership of vhost directory
chown -R <username>:<username> /var/vhosts/<site>
- Add apache user www-data to user’s group
usermod -a -G <username> www-data
- Check the groups that the user www-data belongs to:
- The statement above gives apache web server the required permissions in order to run effectively all of the user’s websites.
root# groups www-data www-data : www-data <username> ...
- Create virtual host or virtual directory apache configration
- Virtual directory setup
Alias /<subsite> /var/vhosts/<site> <Directory /var/vhosts/<site> Options None AllowOverride All Order allow,deny Allow from all </Directory>
- Virtual host setup. Let’s assume <site> is example.com. A sample config virtual host config could be similar to the configuration below:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/vhosts/example.com ServerName www.example.com <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/vhosts/example.com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined ErrorLog ${APACHE_LOG_DIR}/example.com.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn </VirtualHost>
- Reload/Restart apache
service apache2 reload
- In case reload doesn’t work (although it should) try restart:
service apache2 restart
- Ready!