,

Meerdere websites op je Mac draaien

Mac OS X: localhost

OS X: localhost

Vlak voor mijn vakantie had ik meerdere websites op mijn Mac draaien zodat ik verschillende websites kan testen. Nu heb ik mijn Mac ge-update naar El Capitain en ben ik weer aangewezen op één website. Hoe deed ik dat ook alweer? Normaal schrijf ik een blog en spiek ik zelf ook wel eens als ik het vergeten ben. Nu heb ik er niets over geschreven en moet ik het weer opnieuw uitzoeken. Dus alsnog een blog…

Apache

De Mac draait OS X en dit is gebaseerd is op een BSD-kern. Hierdoor is dit dus UNIX en is het standaard uitgerust met Apache. Deze wordt niet automatisch geactiveerd op een schone installatie van OS X, maar in mijn blogpost: OSX: Beginnen met Laravel leg ik uit hoe je hier mee aan de gang kan gaan.

Apache laat zich configureren door een aantal conf bestanden in /etc/apache2. Zelf heb ik dus de laatste versie van OS X, namelijk El Capitan en dit betekent dat ik Apache HTTP Server Version 2.4 heb en hier zitten wat verschillen in met version 2.2. Omdat 2.4 de toekomst heeft focus ik me hier alleen daarop. Ook heeft El Capitan wat verschillen, hieronder beschrijf ik de handelingen voor deze nieuwste OS X.

Wat wil ik?

Ik wil een standaard website op mijn Mac draaien mochten mensen verbinding maken met mijn Mac via de browser. Zo zien ze iets en kan ik eventueel dingen aanbieden. Ik ben trainer en kan zo extra informatie delen zonder dat het meteen publiek op internet staat. Daarnaast ben ik zelf altijd bezig met verschillende projecten die ik wil testen dus ik wil dus nog een aantal websites kunnen benaderen, zoals prutsen.dev, diveprofile.dev of declaraties.dev, etc.

Hoe doe ik dat?

Als eerste moet je Apache vertellen dat je meerdere websites wilt laten aanbieden.

  • start terminal en open de config file van Apache
    sudo nano /etc/apache2/httpd.conf
  • Haal het hekje weg voor:
    #Include /private/etc/apache2/extra/httpd-vhosts.conf
  • Voorheen werkt het bij mij al, nu moet ik de volgende aanpassing ook doen;
    Haal het hekje weg voor:

    #LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
  • Sla het bestand op en herstart Apache met ‘apachectl restart’

Met deze instelling kan je dus meerdere websites (of virtual hosts) draaien. Hiervoor moet je dan nu wel een mappenstructuur aanmaken. Je kan het regelen zoals je het zelf wilt, zelf heb ik het op de standaard lokatie gehouden en daar wat mappen bijgemaakt:

/Library/WebServer/Documents Default folder voor alle hostnames die niet gedefinieerd zijn
/Library/WebServer/Sites/Diveprofile Folder voor diveprofile.dev
/Library/WebServer/Sites/declaraties Folder voor declaraties.dev

etc.

Met de instellingen in httpd.conf en de juiste mappen kan je de verschillende websites of virtual hosts configureren. Dat kan in het bestand: httpd-vhosts.conf met de volgende stappen:

  • Start terminal en open de config file van Apache
    sudo nano /etc/apache2/extra/httpd-vhosts.conf
  • Hierin kun je de virtual hosts invullen. Hieronder zie je een voorbeeld van mijn file.
    #
    # VirtualHost example:
    # Almost any Apache directive may go into a VirtualHost container.
    # The first VirtualHost section is used for all requests that do not
    # match a ServerName or ServerAlias in any <VirtualHost> block.
    #
    
    <VirtualHost *:80>
        ServerAdmin floris@vanenter.nl
        DocumentRoot "/Library/WebServer/Documents"
        ServerName localhost
        ServerAlias localhost
        ErrorLog "/private/var/log/apache2/localhost-error_log"
        CustomLog "/private/var/log/apache2/localhost-access_log" common
    
        <Directory "/Library/WebServer/Documents">
            Require all granted
            Options Indexes FollowSymLinks Multiviews
            MultiviewsMatch any
            AllowOverride All
        </Directory>
    </VirtualHost>
    
    <VirtualHost divelog.dev:80>
        ServerAdmin floris@entermi.nl
        DocumentRoot "/Library/WebServer/Sites/Divelog/public"
        ServerName divelog.dev
        ServerAlias divelog.dev, www.divelog.dev
        ErrorLog "/private/var/log/apache2/divelog-error_log"
        CustomLog "/private/var/log/apache2/divelog-access_log" common
    
        <Directory "/Library/WebServer/Sites/Divelog/public">
            Require all granted
            Options Indexes FollowSymLinks Multiviews
            MultiviewsMatch any
            AllowOverride All
        </Directory>
    </VirtualHost>
  • Nu kan je de virtual host benaderen door in je hosts file de url aan 127.0.0.1 te koppelen. In mijn geval betekent dat dus dat ik divelog.dev zou koppelen. Je kan je hosts file als volgt aanpassen:
    sudo nano /etc/hosts

Waarschuwing

Een kleine waarschuwing is op zijn plaats. Zoals je het wellicht in mijn config file ziet kan iedereen verbinding maken met mijn websites als ze mijn ip-adres hebben èn, bijvoorbeeld, divelog.dev koppelen aan mijn ip-adres. Als je sites privé wilt houden dat alleen jijzelf kan zien zal je wat instellingen moeten aanpassen.
Je zal:

Require all granted

moeten vervangen door:

Require local