apache

Apache Webserver Directory Listing (Verzeichnisauflistung) deaktivieren / aktivieren

apache logo

Wenn das Directory Listing im Apache Webserver aktiviert ist, stellt das ein hohes Sicherheitsrisiko dar und sollte deswegen deaktiviert werden.

Apache directory listing deaktivierenDirectory Listing ist eine Webserver Funktion, um im Browser bequem den Inhalt eines Ordners auflisten zu lassen ohne dafür ein entsprechendes Skript zu verwenden. Bei lokal installierten Webservern mag diese Funktion ganz praktisch erscheinen. (siehe Screenshot).

Aber man sollte sich doch Gedanken über die Verwendung der Funktion im Live Betrieb machen. Potentiellen Angreifern wird durch die Auflistung und Ausgabe der Dateien ihre Arbeit erleichtert. In der Standard Apache Konfiguration ist die Verzeichnisauflistung aktiviert und kann folgendermaßen deaktiviert werden:

Apache directory Listing in der VirtualHost Konfiguration deaktivieren:

Unter Debian und Ubuntu sieht die Directory Direktive der VirtualHost Konfiguration, nach der Apache Installation folgendermaßen aus:

<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
</Directory>

Der Options Parameter “Indexes” ist hierfür für das Directory Listing verantwortlich. Wenn vor Indexes ein Minus gesetzt wird, ist die Verzeichnisauflistung deaktiviert.

<Directory /var/www/>
  Options -Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
</Directory>

Apache Verzeichnisauflistung in der apache2.conf global deaktivieren

Am Ende der /etc/apache2/apache2.conf folgenden Teil einfügen:

Options -Indexes

Hierbei sollte aber beachtet werden dass in der VirtualHost Konfiguration der Wert Indexes komplett entfernt wird, da er ansonsten wieder überschrieben wird. Wenn das Listing für bestimmte Webseiten verwendet werden soll, kann es so einfach über die vHosts aktiviert werden.

Apache Directory Listing für bestimmte Ordner deaktivieren oder aktivieren

Wenn die Verzeichnisauflistung nur für bestimmte Ordner deaktiviert oder aktiviert werden soll, kann einfach eine .htaccess Datei im jeweiligen Webserver Verzeichnis erstellt werden, die folgende Zeile beinhaltet:

Options -Indexes

Damit die .htaccess Datei aber auch erkannt wird muss die “AllowOverride All” in der vHost Konfiguration aktiviert sein.

Tags: , , , , , , , ,

Dienstag, April 30th, 2013 Apache, Linux, WebServer 5 Kommentare

HowTo: Browser Caching im Apache Webserver aktivieren + htaccess mit mod_expires oder mod_headers

apache logo

Browser Caching ist eine einfache Methode um den Traffic einer Webseite zu reduzieren und somit die Performance zu erhöhen. Zudem dauert die Einrichtung im Apache Webserver maximal fünf Minuten und sollte bei allen gängigen Webhosting Paketen unterstützt werden.

Performance Test via Google Page Speed Insights

Auf Google Pages Speed Insights, kann man seine Website auf Geschwindigkeit (Performance) überprüfen lassen und erhält zudem eine detailierte Auswertung und sehr ernst gemeinte Verbesserungsvorschläge. Eine Überprüfung von www.sysadminslife.com sieht zB. (ohne aktiviertem Browser Cache) wie folgt aus:

Google PageSpeed Insights ohne aktiviertem Caching

Google sagt: ”Browser-Caching nutzen” – Leverage Browser Caching

“Die Aktualität der folgenden Cache-fähigen Ressourcen ist nur von kurzer Dauer. Legen Sie fest, dass folgende Ressourcen künftig mindestens einmal pro Woche ablaufen”

Jeder moderne Webbrowser (Chrome, Firefox, Internet Explorer, etc) hat einen eingebauten Cache, was bedeutet: dass Dateien zwischengespeichert und nicht bei jedem Aufruf neu heruntergeladen werden müssen. Darunter fallen in der Regel Dateitypen wie Bilder, Stylesheets, Javascripts, etc.. Der Browsercache funktioniert allerdings nur dann vernünftig, wenn auch am Webserver entsprechende Regeln bzw. ein Ablaufdatum für die einzelnen Dateitypen festgelegt wird.

Ist eine entsprechende “expire” Regel aktiviert, so wird dem Browser vom Webserver mitgeteilt, dass zB. das Bild background.jpg für 7 Tage gecached werden kann. Der Browser muss das Bild somit nicht bei jedem Seitenaufruf neu laden, sondern behält es in seinem Zwischenspeicher. Das spart somit Traffic und dadurch auch Ladezeit.

Browser Caching aktivieren – htaccess mit mod_expires

Damit man das Browser Caching nun auf dem eigenen Root Server aktivieren kann, wird zuvor das Modul “mod_expires” aktiviert, falls es noch nicht aktiviert ist. Ein managed Webhosting Paket sollte das Modul eigentlich zur Verfügung stellen. Unter den gängigsten Linux Distributionen wird mod_expires folgendermaßen auf der Commandline aktiviert. Ein Neustart des Apache Prozess ist anschließend erforderlich:

a2enmod expires
/etc/init.d/apache2 restart

Anschließend wird in die bestehende .htaccess Datei (falls vorhanden) oder in eine neue .htaccess Datei folgender Inhalt eingefügt. Der Teil kann auch direkt in die globale Apache Konfiguration oder in die Vhost Konfiguration geschrieben werden. Die If Anweisung schützt dabei den Apache Prozess, sodass angeführte “Expire Regeln” nur zum Einsatz kommen, wenn auch das Modul mod_expires aktiviert ist:

&lt;IfModule mod_expires.c&gt;
  ExpiresActive On
  ExpiresByType image/gif &quot;access plus 7 days&quot;
  ExpiresByType image/ico &quot;access plus 7 days&quot;
  ExpiresByType image/jpeg &quot;access plus 7 days&quot;
  ExpiresByType image/jpg &quot;access plus 7 days&quot;
  ExpiresByType image/png &quot;access plus 7 days&quot;
  ExpiresByType text/css &quot;access plus 7 days&quot;
  ExpiresByType text/javascript &quot;access plus 7 days&quot;
  ExpiresByType application/x-javascript &quot;access plus 7 days&quot;
  ExpiresByType application/javascript &quot;access plus 7 days&quot;
&lt;/IfModule&gt;

“ExpiresByType” spricht den MIME Type an und setzt via “access plus 7 days” den Cache Wert auf 7 Tage. Die entsprechenden Dateien bleiben also bis zu 7 Tage im Browser Cache erhalten. Hier kann natürlich auch ein höherer oder für gewisse MIME Types (css, xml, js, ..) auch ein niedrigerer Wert eingestellt werden. Je nach Anwendungsgebiet kann hier variiert werden. Mit 7 Tage haben wir allerdings gute Erfahrungen gemacht.

Alternative: Browser Caching mit mod_headers

Als Alternative zur Methode mit dem Modul mod_expires gibt es noch eine Variante mit dem Modul mod_headers. Hier können die Dateitypen direkt über die Dateiendungen angesprochen werden und nicht via MIME-Types:

a2enmod headers
/etc/init.d/apache2 restart

Nachdem das Modul aktiviert wurde, kann folgender Teil wieder direkt in die .htaccess Datei oder in die Apache Konfiguration eingetragen werden.

&lt;IfModule mod_headers.c&gt;
  &lt;FilesMatch “\.(gif|ico|jpeg|jpe|png|css|js)$”&gt;
   Header set Cache-Control “max-age=604800, public”
  &lt;/FilesMatch&gt;
&lt;/IfModule&gt;

Header set Cache-Control setzt den Wert für max-age auf 604800 Sekunden (7 Tage). Dem Browser wird somit mitgeteilt, dass die gespeicherten Dateien für 7 Tage aktuell sind und nicht erneut vom Server geladen werden müssen. Wenn man für andere Dateitypen noch verschiedene Ablaufdaten festlagen möchte, dann kann einfach eine weitere Zeile (<FilesMatch …. </FilesMatch>) eingefügt werden.

Auswirkung und Fazit

Sobald die htaccess Datei gespeichert wird, ist das Browser Caching aktiv. Eine Aktualisierung des Google Page Speed Insights sollte dabei sofort eine Score Verbesserung anzeigen:

Google PageSpeed Insights mit aktiviertem Caching

Der Score nur durch die Aktivierung des Browser Caching von 87 auf 90 gestiegen. Das mag auf den ersten Blick nicht viel erscheinen, bringt aber tatsächlich ein wenig Geschwindigkeit und sollte daher auch genutzt werden. Warum Potential verschenken, wenn es so einfach umgesetzt werden kann? ;)

Weitere Verbesserungsmöglichkeiten bietet die gzip Komprimierung einer Website und die Verwendung eines OPcache für PHP.

Tags: , , , , ,

Mittwoch, April 10th, 2013 Apache, Linux, WebServer 2 Kommentare

Aktivierte Apache Module anzeigen / deaktivieren / aktivieren

apache logo

Anleitung wie man aktivierte Apache Module auf seinem Linux Webserver anzeigen lassen kann und wie diese deaktiviert (a2dismod) bzw. aktiviert (a2enmod) werden können.

Aktivierte Apache Module anzeigen lassen

Auf allen gängigen Linux Distributionen kann man einfach folgendem Befehl in der Commanline absetzten und man erhält eine Auflistung der aktivierten Apache Module. (Bei CentOS/RHEL wird apache2ctl durch httpd ersetzt) (Falls der Pfad nicht aufgelöst werden kann, einfach ein /usr/sbin/ davor hängen):

apache2ctl -M

oder

apache2ctl -t -D DUMP_MODULES

Beispielausgabe:

Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 actions_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 headers_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Die Ausgabe zeigt die geladenen Module mit den Werten static bzw. shared an.

static: Fix kompilierte Module – können nicht deaktiviert werden ohne dass der Apache neu kompiliert werden muss, was ich auf keinen Fall raten würde.

shared: Dynamisch geladene Module – können jederzeit, deaktiviert oder aktiviert werden. Man sollte jedoch wissen wofür und vor allem ob die aktivierten Module benötigt werden bevor man sie deaktiviert. Der Apache kann sonst in einen ziemlich “labilen” Zustand versetzt werden.

Apache Module unter Debian, Ubuntu, Linux Mint deaktivieren

Um ein Apache Modul auf Debian basierten Linux Distributionen zu deaktivieren verwenden wir den Befehl “a2dismod” und geben den entsprechenden Modulnamen an:

Der a2dismod Befehl listet ohne Parameter alle Module auf, die deaktiviert werden können

a2dismod MODULNAME

Beispiel:

a2dismod deflate

Deaktiviert das Modul deflate, welches zB. für die Komprimierung verwendet wird. Ein Neustart des Apache Dienstes ist anschließend notwendig:

/etc/init.d/apache2 restart

Apache Module unter Debian, Ubuntu, Linux Mint aktivieren

Um ein verfügbares Apache Modul auf Debian basierten Linux Distributionen zu aktivieren wird der Befehl “a2enmod” verwendet und geben den entsprechenden Modulnamen an:

Der a2enmod Befehl listet ohne Parameter alle Module auf, die aktiviert werden können

a2enmod MODULNAME

Beispiel:

a2enmod ssl

Aktiviert das Modul ssl, um die HTTPS Verschlüsselung (Port 443) für den Apache zu aktivieren. Ein Neustart des Apache Dienstes ist anschließend notwendig:

/etc/init.d/apache2 restart

CentOS, RHEL Apache (HTTPD) Module deaktivieren / aktivieren

Unter RedHat Enterprise Linux und CentOS gibt es kein entsprechendes Verwaltungssystem (a2enmod/a2dismod), weshalb die mitgelieferten Module direkt in der Apache Konfigurationsdatei (/etc/httpd/conf/httpd.conf) via LoadModule geladen werden :

...
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
...

Nicht benötigte Module können hier mit einem # auskommentiert werden.

Zusätzliche httpd Module, welche zu einem späteren Zeitpunkt installiert werden, findet man als .conf Datei im Verzeichnis /etc/httpd/conf.d/ welches in die Apache Konfiguration eingebunden (included) wird.

Liste der Apache Module

Tags: , , , , ,

Mittwoch, April 3rd, 2013 Apache, Linux, WebServer Keine Kommentare

Zend OPcache – PHP Beschleuniger + OpCode Cache – Installation unter Debian, Ubuntu, Linux Mint

PHP Logo

Der PHP Zend Optimizer Plus war lange Zeit nur als kostenpflichtige Version erhältlich und ist seit Februar 2013 Open Source und umbenannt auf Zend OPcache. Der Grund für diesen Schritt ist wohl die fixe Integration in die nächste PHP Version

Update März 2013: Zend Optimizer Plus wurde in Zend OPcache umbenannt. Die Anleitung wurde entsprechend angepasst.

Der Zend OPcache steigert die Performance und optimiert PHP indem er den Code vorkompiliert und im RAM (Hauptspeicher) hält und somit Verzögerungen durch Lesezugriffe auf die langsamerer Festplatte  reduziert.

Zend Optimizer+ wurde im Februar 2013 auf github umgezogen und ist so quelloffen und frei verfügbar. Mitte März wurde das Projekt in Zend OPcache umbenannt. Ich habe das Tool ausgiebig getestet und muss sagen dass die Performance wirklich beeindruckt. So funktioniert die Installation auf eurer Debian basierten Linux Distribution.

Wichtig ist hierbei immer, dass ihr auch eine entsprechende Webseiten Performance Analyse durchführt, damit man auch die Auswirkung von Zend OPcache sieht. Bei meinem Blog war mit aktivierten WP Super Cache Plugin eine Performancesteigerung von 20% möglich.

Zend OPcache unter Debian, Ubuntu und Linux Mint installieren

› Continue reading

Tags: , , , , , , , , , , , , , , ,

Montag, März 18th, 2013 Apache, Linux, WebServer 11 Kommentare

PHP 5.4 Installation unter Debian Squeeze und Upgrade von PHP 5.3

PHP Logo

Da PHP 5.4 mittlerweile seit fast einem Jahr auf dem Markt ist und erhebliche Performance und Security bringt, sollte man sich mit einem Update von älteren PHP Versionen auseinandersetzen. So funktioniert die Installation bzw. ein Upgrade unter Debian Squeeze.

Warum sollte ich PHP 5.4 installieren?

PHP 5.3.0 erschien am 30 Juni 2009, was schon ziemlich lange her ist. Allerdings wird 5.3 nach wie vor supported und es werden weiterhin Bugfixes und Securityupdates zur Verfügung gestellt.

PHP 5.4.0 erschien am 1. März 2012, und ist mittlerweile bei Version 5.4.12 angekommen. Die Technik wurde allerdings sehr stark weiterentwickelt wodurch die Geschwindigkeit und die Sicherheit verbessert wurde. Ein Upgrade von Version 5.3 auf 5.4, soll unoptimiert einen Gschwindigkeitsboost von 5-10% bringen. Ein Benchmark bei einer WordPress Installation ohne Caching Plugin und ohne Optcache ergab einen Boost von 40%, was ich doch sehr beeindruckend finde. Es spricht also so einiges dafür, auf die neueste PHP Version upzudaten, was ich mittlerweile auch nur wärmstens empfehlen kann, da wir bereits gute Erfahrungen mit der 5.4er Version gemacht haben. Also worauf wartest du? So gehts…

Installation von PHP 5.4 unter Debian Squeeze

Da ich normalerweise kein Fan von Drittrepositories bin und somit mein System immer recht sauber halte, muss ich hier aber über meinen Schatten springen. Ich habe zuerst überlegt die Wheezy Repositories anzuzapfen, aber selbst dort ist die PHP Version von 5.4 schon wieder sehr veraltet (5.4.4).

Die Jungs von Dotdeb sind da sehr viel aktiver und bieten bereits PHP 5.4.11 an und sind im Bereich Webhosting um Jahre schneller als die Debian Maintainer. Dotdeb ist auch der einzige Mirror, welchen ich ausser den Debian Mirrors verwende. Natürlich gäbe es noch den alten Weg, sodass man PHP selbst kompiliert. Aber das ist für Anfänger absolut ungeeignet, deshalb zeige ich hier den Weg über die dotdeb mirrors.
› Continue reading

Tags: , , , , , , , , , ,

Dienstag, März 5th, 2013 Apache, Debian, Linux, WebServer 16 Kommentare

Webserver Geschwindigkeit messen mit Apache Benchmark (ab) – Performance Test

apache logo

In Zeiten wie diesen wird es immer wichtiger die Ladezeiten einer Webseite zu optimieren. Natürlich in erster Linie, um dem User die beste Experience zu gewährleisten. Und in weiterer Instanz natürlich für Google, da die Website-Performance auch in das Suchmaschinen Ranking einfließt.

Doch bevor man anfängt wild “herumzuoptimieren” und diverse Tools auszuprobieren, sollte man sich im ersten Schritt Gedanken machen wie man die Performance eigentlich messen kann.

  • Wieviele Anfragen kann mein Webserver gleichzeitig verarbeiten?
  • Welche Geschwindigkeit hat mein Webserver bei einem Aufruf einer Webseite?

Apache liefert bei der Serverinstallation ein tolles Tool mit, welches sich “Apache HTTP server benchmarking tool” (kurz: “ab” oder “ab2″) nennt. Dieses kann verwendet werden um mehrere und vor allem gleichzeitige Anfragen auf Webservern zu simulieren. Man könnte jetzt viele Worte darüber verlieren was das Programm macht und kann, aber am besten sieht man es an einem Praxisbeispiel.

Webseiten Performance messen mit Apache Benchmark

Was gibt es zu beachten?

1) Der Server, welcher den Benchmark durchführt, sollte ein anderen sein, als der, der die Webseite hosted. Idealerweise ein dedizierter Root Server mit ordentlich Power.
2) Ihr solltet bei den Tests eine gute Internet Bandbreite zur Verfügung haben.
3) Die Tests sollten immer von dem selben Server/Rechner durchgeführt werden.
4) Macht mehrere Durchläufe (mind. 5, besser 10) und errechnet den Durchschnittswert.

Ich verwende für den Apache Benchmark folgenden Befehl:

ab -c 20 -n 200 http://www.sysadminslife.com/

-c Anzahl der gleichzeitigen Verbindungen (20)
-n Anzahl der Anfragen, welche ausgeführt werden (200)
http://www.sysadminslife.com/ gibt die Webseite an, welche getestet wird ;)

ab hat viele weitere Einstellungsmöglichkeiten die hier sehr detailliert beschrieben sind.

TIPP: Beobachtet bei eurem Server, der die Webseite ausliefert, die CPU Last mit dem Befehl “top” während der Benchmark läuft und seht euch die Veränderung an. › Continue reading

Tags: , , , , , , , , , ,

Donnerstag, Februar 28th, 2013 Apache, Linux, WebServer Keine Kommentare

QuickTipp: Weiterleitung (redirect) von HTTP auf HTTPS via Apache oder Htaccess

apache logo

Sensible Webseiten-Daten sollten grundsätzlich immer via SSL Verschlüsseltung ausgeliefert werden (HTTPS statt HTTP). Ich zeige in diesem QuickTipp wie die Weiterleitung von HTTP auf HTTPS eingerichtet wird sodass auch Parameter erhalten bleiben.

Eine SSL Verschlüsselung ist grundsätzlich einge gute Idee sensible Daten gegen Dritte zu schützen. Aber was bringt es wenn das SSL Zertifikat am Root Server / managed Server installiert und die Verschlüsselung aktiviert ist, aber die Webseite trotzdem noch per HTTP erreichbar ist? HTTP muss daher auf HTTP weitergeleitet werden. Je nachdem welche Bereiche man schützen will kann man die Konfiguration erweitern,  sodass sie nur für gewisse Verzeichnisse oder Anfragen greift.

Voraussetzung: Apache rewrite Modul aktiviert und Webserver bereits via HTTP und HTTPS erreichbar.

HTTP auf HTTPS weiterleiten via htaccess

Die .htaccess Datei sollte direkt im Root Verzeichnis der Webseite liegen. In meinem Beispiel werden sämtliche Webseiten Aufrufe, welche per HTTP auf den Server kommen, auf HTTPS umgeschrieben. Für den User bleibt dieser Vorgang eigentlich völlig unbemerkt, da der Prozess im Hintergrund statt findet.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Zeile 1: überprüft ob das Modul mod_rewrite aktiviert ist
Zeile 2: aktiviert die Rewrite Engine
Zeile 3: überprüft ob HTTPS eingeschaltet ist, wenn nicht führt er den Inhalt von Zeile 4 aus
Zeile 4: leitet sämtliche Anfragen via Statuscode 301 (permanent redirect) auf HTTPS um

Warum Status Code 301 und nicht 302?

Standardmäßig wird in der RewriteRule mit R (Redirect) die Weiterleitung definiert. Diese liefert den HTML Statuscode 302 (found), also eine Temporäre Weiterleitung zurück. Wir definieren aber explizit den Status Code 301 (permanent redirect) für eine Permanente Weiterleitung.

Das ist gerade für SEOs in der Suchmaschinenoptimierung sehr wichtig, wenn bereits Backlinks auf die Webseite mit HTTP existieren. Die Linkkraft wird mit einem 301 Redirect direkt und ohne Verlust auf die HTTPS Seite übertragen, ohne dabei an Ranking zu verlieren.

Matt Cutts über 301 Weiterleitungen

Weiterleitung von HTTP auf HTTPS über die Apache Konfiguration

Die Rewrite Regeln müssen nicht unbedingt in einer htacccess Datei stehen, sondern können direkt in der Apache Konfiguration eingetragen werden. zb:. wie folgt in der vHost Konfiguration:

<Virtualhost vhost.domain.com>
ServerName vhost.domain.com
DocumentRoot /var/www/website1
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </IfModule>
</Virtualhost>

Sämtliche Aufrufe auf die Website http://vhost.domain.com werden auf https://vhost.domain.com umgeleitet. Voraussetzung ist natürlich dass die Webseite auch für SSL konfiguriert wurde.

Weitere Informationen zu Apache Rewrite gibts in der offiziellen Dokumentation

Tags: , , , , , , , , , , , , ,

Montag, Februar 25th, 2013 Apache, Linux, WebServer 2 Kommentare
rssfeed google+ youtube
Hosting-Lösungen (VPS, Dedicated Server, Webspace und Colocation) von Contabo

Subscribe to our mailing list

* indicates required Email Adresse *
Blogverzeichnis - Blog Verzeichnis bloggerei.de
Werbung schalten

*=Affiliatelink