Skip to content

Apache HTTP Server on OS X Yosemite

Shawfeng Dong edited this page Nov 2, 2016 · 2 revisions

OS X Yosemite (10.10) comes with the Apache HTTP Server 2.4.16:

$ uname -a
Darwin corsica3.ucsc.edu 14.5.0 Darwin Kernel Version 14.5.0: Tue Sep  1 21:23:09 PDT 2015; root:xnu-2782.50.1~1/RELEASE_X86_64 x86_64

$ apachectl -v
Server version: Apache/2.4.16 (Unix)
Server built:   Jul 22 2015 21:03:09

but the web server is disabled by default (/System/Library/LaunchDaemons/org.apache.httpd.plist):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <true/>
        <key>Label</key>
        <string>org.apache.httpd</string>
        <key>EnvironmentVariables</key>
        <dict>
                <key>XPC_SERVICES_UNAVAILABLE</key>
                <string>1</string>
        </dict>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/httpd</string>
                <string>-D</string>
                <string>FOREGROUND</string>
        </array>
        <key>OnDemand</key>
        <false/>
</dict>
</plist>

I recently enabled the Apache HTTP Server on Prof. Doug Lin's Mac Pro, so that he can server his course materials from http://corsica3.ucsc.edu/~lin/.

Per-user web directory is disabled by default[1]. To enable it, uncomment the following 2 lines of /private/etc/apache2/httpd.conf:

LoadModule userdir_module libexec/apache2/mod_userdir.so
Include /private/etc/apache2/extra/httpd-userdir.conf

On OS X, the default per-user web directory is Sites; but Prof. Lin prefers public_html. Modify /private/etc/apache2/extra/httpd-userdir.conf so that it reads as follows:

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

And create a file /private/etc/apache2/users/lin.conf with the following content:

<Directory "/Users/lin/public_html/">
Options Indexes
AllowOverride None
Require all granted
</directory>
NOTE Require all granted is an access control configuration for Apache 2.4[2], which is equivalent to the following configuration for Apache 2.2:
Order allow,deny
Allow from all

We can test whether the web server is working, by manually start the HTTP server:

$ sudo apachectl start
and pointing our web browser to http://corsica3.ucsc.edu/~lin/.

To enable the web server permanently (to survive reboots):

$ sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
NOTE This command doesn't modify /System/Library/LaunchDaemons/org.apache.httpd.plist; rather, it adds the following lines to /private/var/db/com.apple.xpc.launchd/disabled.plist:
        <key>org.apache.httpd</key>
        <false/>

References

  1. ^ Per-user web directories
  2. ^ Upgrading to 2.4 from 2.2
Clone this wiki locally