Apache / httpd

Security headers for HTTP

Good resource for checking current state of your website: securityheaders.io

<IfModule mod_headers.c>
Header always set X-XSS-Protection "1; mode=block"
Header always set x-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Strict-Transport-Security "max-age=63072000; preload"
# Content-Security-Policy depends heavily on requirements (is still experimental and has nearly no browser support)
# Examples:
#Header always set Content-Security-Policy "default-src 'self'; font-src *;img-src * data:; script-src *; style-src *;"
#Header always set Content-Security-Policy "default-src 'self'; connect-src *; font-src *; frame-src *; img-src * data:; media-src *; object-src *; script-src * 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inline';"
Header always set Referrer-Policy "same-origin"
</IfModule>

Some resources for more detailed descriptions:

Referrer-Policy

HTTP Strict-Transport-Security (HSTS)

HSTS Preload

HTTP Headers in general

And finally, if you have not enabled the apache mod_headers module you can do it with two commands:

a2enmod headers
/etc/init.d/apache2 graceful

Using curl to look up HTTP headers 

If you want to check if the http-headers are properly set you can use your web browsers developer tools or do a curl request to return only headers.

# Verify HTTP headers are set using curl:
# The insecure option ignores certificate errors (often seen on testing environments)
curl -I https://your-website.domain --insecure

Enable http/2

  • mod_php not supported, use php-fpm (install and configure php-fpm, a2dismod php)
  • mpm_prefork not supported use mpm_event instead (a2dismod mpm_prefork, a2enmod mpm_event)
  • a2enmod http2
  • In your VirtualHost set 'Protocols h2 http/1.1'

Good resource for installation instructions see http2.pro website.

Apache Error log / debugging

Apache does not start up or other debugging is required:

  • /etc/init.d/apache2 status
  • journalctl -xn
  • tail -n 50 /var/log/apache2/error.log

Config finden

Um herauszufinden wo die verwendete httpd.conf Datei liegt kann die Option "-V" (großer Buchstabe "V") verwendet werden:

# mac os-x
apachectl -V

# linux 
apache2 -V

Add trailing slash if file/directory/symlink does not exist

.htaccess:

# redirect to "slashed" virtual directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=303,L]

Für Verwendung in der httpd.conf muss jedem "%{REQUEST_FILENAME}" noch "%{DOCUMENT_ROOT}" vorangestellt werden.

.htaccess Umleitung von non-www zu www-Version (und vize-versa)

ACHTUNG: Bevor man sich dazu entscheidet eine Webseite ohne "www" zur Verfügung zu stellen, sollte man beachten, dass Cookies ohne Subdomain für sämtliche Subdomains zur Verfügung stehen.

Das ist zwar nicht zwangsläufig falsch aber in manchen Fällen unerwünscht.

Weiteres ACHTUNG: Da manche Browser die Weiterleitung sehr aggressiv cachen empfiehlt es sich zum Testen ein 302 (Found) zu verwenden und erst nach erfolgreichem Test auf 301 (Moved Permanently) umzustellen.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^skanto\.de
RewriteRule (.*) http://www.skanto.de/$1 [R=301,L]

Analog funktioniert es anders herum von der www zur nicht-www Version:

RewriteCond %{HTTP_HOST} ^www\.skanto\.de$ [NC]
RewriteRule ^(.*)$ http://skanto.de/$1 [R=301,L]

oder generisch (für http und https von non-ww zu www):

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Feedback
Wir bearbeiten Dein Feedback aus diesem Formular über gitlab.com – Du kannst das E-Mail Feld leer lassen, falls Du keine Antwort von uns erwartest. Alternative Kontaktmöglichkeiten findest Du im Impressum.