The Net, the Web and other Geeky stuff
Author: MikeW Date: 2016-08-28 11:49 Tweet
This is a tip on how to configure Apache 2 to support multiple sites on one server for Mac OS X El Capitan, Mavericks, and Yosemite. This is a much improved process thanks to this write up on Apache and vhosts. A vhosts approach is used to configure the server. The makes the setup simpler and quicker.
Note: This tip assumes you have some knowledge of Mac OSX system administration. You need to use sudo to edit and create files and directories. Make sure you can use either nano or vi before attempting to edit any configuration files.
/etc/hosts for Multiple SitesTo be able to use multiple sites on one server, you must first update the /etc/hosts file. Add an entry for each of your sites to the localhost address. For example:
sudo nano /etc/hosts127.0.0.1 localhost site1 site2Before the Apache configuration file is edited, a little setup. is required.
sudo bashcd /etc/apache2mkdir vhostsHere are some sample files that demonstrate how you could setup each test site on the Apache server.
Imporant Note: The Apache server needs to be able to read the directory your files are in. If you are like me and your files are stored in a subdirectory under your home directory, the default permissions (700) may cause access issues. Make sure any web directories under your home directory have their permissions to 755. That should fix any access issues. If you need to write to a web directory, you may need to create a new web directory with sudo/root and set the directory group to staff.
00Default.conf
This is a default vhost. Any unamed url, (e.g., localhost) will serve up the page using this setting.
<VirtualHost *:80>
DocumentRoot "/Users/myhome/www/site1"
<Directory "/Users/myhome/www/site1">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
site1.conf
Here is the configuration for site1 in the www directory.
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "/Users/myhome/www/site1"
ServerName site1
ServerAlias site1.local
ErrorLog "/private/var/log/apache2/site1-error_log"
CustomLog "/private/var/log/apache2/site1-access_log" common
<Directory "/Users/myhome/www/site1">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
site2.conf
Here is the configuration for site2 in the www directory.
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "/Users/myhome/www/site2"
ServerName site2
ServerAlias site2.local
ErrorLog "/private/var/log/apache2/site2-error_log"
CustomLog "/private/var/log/apache2/site2-access_log" common
<Directory "/Users/myhome/www/site2">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
httpd.confEdit the httpd.conf file. Uncomment these two lines to enable PHP5 ad mod_rewrite.
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php5_module libexec/apache2/libphp5.so
Then scroll down to this comment:
# Virtual hosts
And add this line.
Include /private/etc/apache2/vhosts/*.conf
So now, any .conf file placed into the vhosts directory will automatically load when Apache starts.
To restart apache:
apachectl restart
That is it. Now to add a new web site to Apache, just put a new site file in the vhosts directory, update your /etc/hosts file, and restart Apache. Voila!