wiki:howto/Apache2

Version 7 (modified by magill@…, 9 years ago) (diff)

more updates

<- Back to the HOWTO section

This page describes the installation of the Apache2 Web server under OSX (Yosemite 10.10.2) via MacPorts (version 2.3). Date 28 December 2014

For information on integration Apache with MySQL and PHP, see: howto/MAMP

Step 1: Turn off Apple's "Personal Web Sharing"

If you haven’t already done so, make sure you turn off Apple’s "Personal Web Sharing" so that the default Apache server is not running. While you can set things up so that both servers run on different ports (e.g., port 80 and port 8080), it’s not worth the hassle of maintaining two web server daemons. Just use the latest Apache from MacPorts and be done with it.

OS X 10.8 and older

Turn off Personal Web Sharing in the Sharing pane of System Preferences.

Mavericks

Stop the web server from the command line:

$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Yosemite

Yosemite no longer has Personal Web Sharing as an option. Although the Apache 2 web server is still supplied by Apple as part of the Yosemite distribution, there is no "easy" way to turn it on (or off). So, if you managed to turn it on, you already know how to turn it off!

OS X Server

Launch Server Manager and turn off the web server.

Step 2: Install Apache

$ sudo port install apache2

A sample configuration file is provided in /opt/local/apache2/conf/original/httpd.conf. Don't edit this file; leave it as is so you can refer to the defaults later. The first time you install apache2, the sample configuration file will be copied to /opt/local/apache2/conf/httpd.conf for you. You can edit this file as desired. When you later upgrade apache2 to a newer version, MacPorts will upgrade the sample configuration file but will not modify your httpd.conf, so be sure to manually compare your httpd.conf with the new sample configuration file and bring over any relevant changes. You should also keep backup copies of your httpd.conf in a safe place.

Step 3: Verify your config file

Verify any changes you have made to the config file: /opt/local/apache2/conf/httpd.conf

$ /opt/local/apache2/bin/apachectl -t

This will return either "Syntax OK" or a specific line by line error listing.

Step 4: Activate Apache2

Activate your Apache installation so that it starts now and every time you boot your machine:

$ sudo port load apache2

If when you issue this command, you immediately receive the message:

/opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist: Operation already in progress

This means that the Launch Daemon believes that it successfully started Apache. At this point, a configuration error is your most likely problem. Verify your config file as above.

After correcting any config errors and saving the updated config file, simply run:

$ sudo port unload apache2

to stop apache (even though it is not running) and then start it using

$ sudo port load apache2

to start it again.

The default log file location is: /opt/local/apache2/logs/. The startup will be logged in "error_log"

Step 5: Initial changes to the config file

Once you have determined that your basic installation is working, you need to consider making some initial changes to your config file.

After each change to the config file, you should again verify the file syntax, and then you need to stop and restart Apache for the changes to take effect.

$ /opt/local/apache2/bin/apachectl -t
$ sudo port unload apache2
$ sudo port load apache2

In Apache documentation (including this page), you will see the use of "apachectl -k restart" described as the method to cause the config file to be re-read.

However under OSX, the purpose of launchd is to notice processes that stop without its knowledge, and to restart them. So if you use apachectl -k restart, launchd may notice apache "crashing" and restart it itself, confusing apachectl. Instead, you shoulduse "port" to tell launchctl to unload apache2, then load it again. This will result in a short interruption of service.

If the sever name is not set properly in the configuration file, /opt/local/apache2/conf/httpd.conf, you will encounter the warning below.

httpd: Could not reliably determine the server's fully qualified domain name, using <Computer-Name>.local for ServerName

Where <Computer-Name> refers to the name of your computer as specified in the System Preferences Sharing pane. To resolve the warning, edit the configuration file and set the server name appropriately. For personal use, localhost is sufficient.

ServerName localhost:80

To verify Apache is now running, point your browser to http://localhost/ (you may need to reload the page). You should see a page that says "It works!"

If desired, reboot your machine and point your browser again to http://localhost/ to confirm that Apache is again running.

NOTE: The setting of "ServerName" to anything other than the Fully Qualified Domain Name (FQDN) of the server under Apache 2.2.x and Yosemite, does not produce the expected results. Using the links above to "localhost" will fail with Safari complaining "Failed to open page. Safari can't open the page "localhost" because Safari can't connect to the server "localhost". The simple answer is "localhost" is an "old-tyme" shortcut which should still work, but often does not for many different reasons. The "Fix" is to simply use the FQDN of your server when testing Apache or related Web services.

User directories

If you would like to be able to access web pages in the Sites directory of your home directory, edit /opt/local/apache2/conf/httpd.conf and locate the following line:

#Include conf/extra/httpd-userdir.conf

Uncomment it by removing the "#" at the start of the line so that it reads:

Include conf/extra/httpd-userdir.conf

This file: "/opt/local/apache2/conf/extra/httpd-userdir.conf" will activate the "Sites" sub-directory for all ~users on your system. ("/Users/*/Sites") and contains initial, basic restrictions for access to the contents of that directory.

After each change to the config file, you should again verify the file syntax, and then you need to stop and restart Apache for the changes to take effect.

$ /opt/local/apache2/bin/apachectl -t
$ sudo port unload apache2
$ sudo port load apache2

You can then view your personal pages by accessing http://localhost/~username/, where "username" is your Mac OS X account's short name.

Local Apache manual

The Apache manual is available on the Apache web site. If you would like to be able to access a copy of this manual on your web server, edit /opt/local/apache2/conf/httpd.conf and uncomment the following line:

#Include conf/extra/httpd-manual.conf

So that it reads like this:

Include conf/extra/httpd-manual.conf

After each change to the config file, you should again verify the file syntax, and then you need to stop and restart Apache for the changes to take effect.

$ /opt/local/apache2/bin/apachectl -t
$ sudo port unload apache2
$ sudo port load apache2

You can then view the manual by accessing http://localhost/manual/.

NOTE: This option expects "/opt/local/apache2/manual" to be accessible under "<Document Root>." This can be accomplished by

$ cd <Document Root>
$ ln -d /opt/local/apache2/manual

Secure Sockets (https)

This works for a development system (not recommended for production!).

openssl genrsa -des3 -out server.key 1024
# [enter your passphrase, a simple password we will remove soon]
openssl req -new -key server.key -out server.csr
# [you can accept all the defaults, it does not matter, or customize it to your liking]
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
# [will ask for passphrase]
cp server.key server.key.bak
openssl rsa -in server.key.bak -out server.key
# [passphrase needs to be typed]
sudo cp server.crt /opt/local/apache2/conf/
sudo cp server.key /opt/local/apache2/conf/

Then enable the following in /opt/local/apache2/conf/httpd.conf

LoadModule ssl_module modules/mod_ssl.so

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

<- Back to the HOWTO section