Table of Contents

Apache HTTP Server

General Information

Installation and configuration of Apache web server.

Checklist


Installation

Installing apache web server is very simple and can be done via repos or compiling. Repos is easier, while compiling usually provides newer versions.


Repo: EPEL

For an easy standard Apache install, the repo install method is used. These packages are older, but stable.

Install package

yum install httpd

Start the service and enable on boot


SSL

To add SSL support, install the “mod_ssl” package:

yum -y install mod_ssl

Repo: Software Collections

Versions as of 04/13/2016:

  1. Install
    yum install httpd24
  2. Enable the software collection
    scl enable httpd24 bash
    1. Control operation as below.

Compile and Install

If you need a newer feature than what is available in the repo installed versions, you may need to compile and install.

Prerequisites


Install Procedure


Configuration

The default configuration:

httpd.conf - Global Configs

Some common defaults to change in /etc/httpd/conf/httpd.conf:

Listen to specific IP instead of all

Listen 10.1.2.3:80

Set ServerName

ServerName example.com:80

NameVirtualHost to specific IP instead of all (if using virtual hosts)

NameVirtualHost 10.1.2.3:80

Security Configs

##-- Security --##
#- Information Disclosure -#
ServerTokens Prod
ServerSignature Off
 
# FileETag: File attributes used to create the ETag HTTP response header for static files
FileETag -INode +MTime +Size
 
#- Web Application Security -#
# Trace/Track - disabled for security purposes
TraceEnable Off
 
# Cross-Frame Scripting prevention (click jacking)
# DENY = Deny all attempts to frame the page
Header always append X-Frame-Options DENY
 
# Cross Site Scripting protection
Header set X-XSS-Protection "1; mode=block"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
##-- End of Security Settings --##

ssl.conf

The SSL config file is located here: /etc/httpd/conf.d/ssl.conf

SSL Certificate and Certificate Authority

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

Protocol and Ciphers

SSLProtocol TLSv1.2
SSLCipherSuite HIGH:!MEDIUM:!3DES:!ADH:!AECDH:!DHE:!EDH:!RC4

Enable SSL Cipher Honoring (server picks the strongest compatible cipher)

SSLHonorCipherOrder on

Other Security Settings

Other important security settings.

Redirect HTTP to HTTPS

Redirect all HTTP to HTTPS

<VirtualHost *:80>
  ServerName example.com
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  </IfModule>
</VirtualHost>

HSTS

Enabling HTTPS Strict Transport Security (HSTS).

Add the strict transport security header to the listening HTTPS host section

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
 
<VirtualHost *:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
</VirtualHost>

Virtual Hosts: Multiple Domains

You can host multiple web sites, each with their own domain, from the same Apache instance by using virtual hosts directives.

Example sites


Virtual Hosts: Single Domain with Site Sub Dirs

An alternative to separate sub-domains, is a single domain with sub directories hosting different sites.

Example Sites


Operation

Controlling the Apache httpd service: Apache recommends using the “apachectl” signals instead of the OS service control interface (service/systemctl).


Start

apachectl -k start

Stop

apachectl -k stop

Graceful Restart

apachectl -k graceful

Restart

apachectl -k restart

Graceful Stop

apachectl -k graceful-stop