Apache webserver configuration checklist
Tags: experience, apache
Published: 2024-03-16 10:08:09

---
title: Apache webserver configuration checklist
published: true
date: 2015-08-01 00:51:31 UTC
tags: Experience,Apache
canonical_url: https://io.serendipityhq.com/experience/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](http://aerendir.me/2015/08/01/how-to-upgrade-php-built-in-your-mac-osx/) 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](http://aerendir.me/2015/08/01/how-to-upgrade-php-built-in-your-mac-osx/).

Here there are [other information about the Mac OsX built-in Apache webserver](http://coolestguidesontheplanet.com/set-virtual-hosts-apache-mac-osx-10-10-yosemite/).

## Troubleshooting

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

```
$ apachectl configtest
```

Remember to “Make. Ideas. Happen.”.

I wish you flocking users, see you soon!

L'articolo [Apache webserver configuration checklist](https://io.serendipityhq.com/experience/apache-webserver-configuration-checklist/) proviene da [ÐΞV Experiences by Serendipity HQ](https://io.serendipityhq.com).