14/08/2021

How to Set Up Local Webserver in OSX BigSur

By snorlaxprime

I need to experiment with my Unifi API, and given that all my machine is occupied, I decided to use my new Hackintosh BigSur as a test bed. So here is the steps that I used to configure my machine.

Step 1. Turn on the build in Apache server

Open the mac Terminal and type in the following command

sudo apachectl start

It will ask you for your password, once you entered your password, the Apache webserver should start, and you can test this using your browser by pointing to localhost or 127.0.0.1. You should see the following message.

Step 2. Create Sites Directory where you page will be hosted

The next step is to create the Sites directory as your homepage. You will create this under your username, and this will allow multiple users to have their own site. So you you will need to create a Sites folder under your user folder. E.g.: if your user name is Bob, you will need to create a folder Sites under Bob.

/Users/bob/Sites

Step 3. Create a .conf file inside the /etc/apache2/users folder

Using the example above you will need to create a Bob.conf file inside the /etc/apache2/users/bob.conf, you can do that using the following command in terminal

sudo vi /etc/apache2/Users/bob.conf

then you need to copy and paste the following configuration

<Directory "/Users/developer/Sites/"> 
AllowOverride All 
Options Indexes MultiViews FollowSymLinks 
Require all granted 
</Directory>

Hit ESC button and then type

:wq

This will save the config file. If you are lost at this point you might want to refer to vi manual.

Step 4. Configure the httpd.conf file to enable features on your webserver

Type the following command in your terminal

sudo vi /etc/apache2/httpd.conf

If you are not familiar with vi editor you might want to use your other favourite editor such as nano

Search using / command and uncommented the following lines by removing the # infront of the line.

LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Then search and uncomment the following line

Include /private/etc/apache2/extra/httpd-userdir.conf

LoadModule php7_module libexec/apache2/libphp7.so

Then find the following lines and replace it with the Sites folder we have created earlier

DocumentRoot "/Library/WebServer/Documents" 
<Directory "/Library/WebServer/Documents">

So it will read

DocumentRoot "/Users/bob/Sites" 
<Directory "/Users/bob/Sites">

Then search for AllowOverride None in a few lines underneath the above <Directory “/Users/bob/Sites”> and change it to AllowOverride All, so it reads like the following

DocumentRoot "/Users/bob/Sites"  
<Directory "/Users/bob/Sites">    
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

Save the file by hitting ESC and :wq if you are using vi editor

Step 5. Configure the httpd-userdir.conf file

In the terminal window type the following command

cd /etc/apache2/extra
sudo cp httpd-userdir.conf httpd-userdir.conf.bak

This will make a backup copy of the httpd-userdir.conf before we modifying it. Now open the file using the following command or your favourite editor.

sudo vi httpd-userdir.conf

and uncommented the following line

Include /private/etc/apache2/users/*.conf

Save the file by pressing ESC and :wq and restart the Apache server using the following command.

sudo apachectl restart

Step 6. Test the Webserver using the PHP file

Now you can create the php test file to test that everything is working as expected. Type the following command in terminal

cd /Users/bob/Sites

Then create a php file called phpinfo.php with the following command

vi phpinfo.php

Type the following in the file

<?php phpinfo(); ?>

Save the file by pressing ESC and :wq. Then point your browser to the site using the following

http://localhost/~bob/phpinfo.php

If all goes well you should see the following php info being displayed.

Phew, now I can get on to test my Unifi API php script.

Congratulations if you made it so far. Let me know whether this is useful and drop me a line if you have any questions.