Blog

Latest News and Updates

Apache webserver configuration checklist

A brief checklist of common things you would like to configure in your Apache webserver.

Access the httpd.conf file on Mac OsX

The httpd.conf file is located at /private/etc/apache2/

Activate PHP modules

If you have installed the Liip’s PHP version, take care of the paths!

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
#LoadModule php5_module libexec/apache2/libphp5.so

Uncomment the lines, set the right path to PHP if you are using the Liip’s one and add the support for .php files:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php5_module /usr/local/php5/libphp5.so

AddType application/x-httpd-php .php .phtml

Configure the Apache user group

Change the default _www user to your username and add the Group: this will ease your work when dealing, for example, with the upload of files.

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User _www
Group _www
User Aerendir
Group #-1

Configure the ServerName

The comments are really clear: uncomment the ServerName directive and set it to localhost:80:

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80
ServerName localhost:80

Open the access to directories in the DocumentRoot

#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
#  blocks below.
#
<Directory/>
    Options Indexes FollowSymLinks
    AllowOverride none
</Directory>

Set the DocumentRoot

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/path/to/your/document/root"
<Directory "/path/to/your/document/root">
    #
    # 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
    Options All

    #
    # 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 None
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
    Order allow,deny
    Allow from all
</Directory>

Add index.php as default Index

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#

<IfModule dir_module>
 DirectoryIndex index.html index.php
</IfModule>

Configure the use of .htaccess

Immediately below the IfModule dir_module block, add the following one:

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride 
# directive.
#
AccessFileName .htaccess

The following lines about FilesMatch can be modified as so:

#
# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 
#
<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    Require all denied
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

Add the following block immediately below:

<Files ~ "^\.DS_Store">
    Order allow,deny
    Deny from all
</Files>

Configure ErrorLog

I prefer to have logs in the same folder of my DocumentRoot:

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a 
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a 
# container, that host's errors will be logged there and not here.
#
ErrorLog "/private/var/log/apache2/error_log"
ErrorLog "/path/to/your/document/root/logs/apache_error_log"

Set the level of logging

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
LogLevel debug

and comment the subsequent CustomLog directive:

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a 
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per- access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog "/private/var/log/apache2/access_log" common

Set the default MIME type of served files

Find the line < IfModule mime_module > and immediately above copy the following block:

#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain

Configure .httpd-vhosts

#
# 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  block.
#

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/Users/Aerendir/Documents/JooServer/"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
    <Directory /path/to/your/document/root/>
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
     </Directory>
</VirtualHost>

Delete or the other blocks.

Restart Apache

$ sudo apachectl restart

And now, maybe you’d like to update the Mac OsX built-in version of PHP.

Here there are other information about the Mac OsX built-in Apache webserver.

Troubleshooting

If you have any problems starting Apache after the editings, use configtest typing in the Terminal:

$ apachectl configtest
AerendirApache webserver configuration checklist
Share this post

1 comment

Join the conversation

Join the conversation

Related Posts