Beiträge zu “Apache”

Logstalgia: Live Webserver Logs als Pingpong

Braucht kein Mensch ist aber witzig. Mit Logstalgia kann man sich die Logfiles live als eine Art PingPong darstellen lassen.

Auf der linken Seite erscheinen die Browser als IP Adressen und auf der rechten Seite sind die aufgerufenen Webseitenelemente. Dazwischen der aus den ersten Videospielen bekannte Cursor der die Webseiten vor den “Kugel” abwehren muss.

Installation unter Debian ist einfach

sudo apt-get install logstalgia ffmpeg

Und wenn man die Logfiles remote abrufen möchte geht das so:

 ssh your.server.de tail -f /var/www/your/logs/access.log | logstalgia --sync

Man kann daraus auch ein Video produzieren wenn man das später vorführen möchte.

Auf meinem Blog sieht das nicht ganz so schön aus weil bei mir keine IP Adressen gespeichert werden und alle Adresse die 127.0.0.1 bekommen.

Hier gibt es auch ein besseres Video

Logstalgia
1.10.15
Weitere Beiträge zu: Apache   Logs   Logstalgia  

Virtuelle Host Dateien von Apache mit Ansible verwalten

Auf einem Webserver kommen schnell unterschiedliche Dienste zusammen die man besser über virtuelle Host trennt. Für Apache muss hierzu eine bestimmte Konfigurationsdatei erstellt werden. Eine Möglichkeit dies zu bewerkstelligen ist es, eine meistens webbasierte Verwaltungsanwendung wie Webmin zu verwenden. Da ich solche Anwendungen nicht mag (wieder eine Anwendung mehr die man aktualisieren und überwachen muss) verwalte ich bisher alle meine Konfigurationen “manuell” über SSH. Das ist zwar “etwas fummeliger” aber am Ende auch nicht so schwierig. Bei ein oder zwei virtuellen Hosts geht das auch noch aber dann wird es unübersichtlich.

Wie bereits hier beschrieben möchte ich Ansible verwenden um dies zu automatisieren. Den genauen Funktionsumfang möchte ich hier nicht erklären, sondern nur meine notwendigen Schritte.

Die meisten vorhandenen Ansible Playbooks gehen von einem “nacktem” Standard Server aus. Dies ist bei mir nicht mehr der Fall und das Ansible Playbook muss es ermöglichen verschiedene Hostdefinitionen für PHP, Perl, HTML Server mit/und/oder SSL zu erstellen. Das folgende Playbook scheint dies zu erreichen. Der hier vorgestellte Ansatz beruht im wesentlichem auf diesem und diesem Dokument.

Zu erst das Playbook. Dort setzte ich im Abschnitt Vars die Variablen die ich später in der VHost Konfiguration brauche. Im Template kann ich dann über die Abrage “if item ‘Variable’ is defined” hostspezifische Variablen setzen.

vi vhost.yml 

---
- hosts: www.server1.de 
  sudo: yes
  vars:
    apache_vhosts_enabled:
    - servername: "www.server1.de "
      serveralias: "server1.de "
      serveradmin: "admin@server1.de "
      SuexecUserGroup: "server1user server1group"
      documentrootdir: "server1.de/public_html"
      logrootdir: "server1/logs"
      InternalAlias: "server1
      Options: "Indexes MultiViews -Includes -FollowSymLinks +ExecCGI"
      DirectoryIndex: "index.html"
      SSLCertificateFile: "path-to-cert.cert.pem"
      SSLCertificateKeyFile: "path-to-key.de.key.pem"
      SSLCACertificateFile: "path-to-CA.."
      SSLVerifyClient: "require"
  tasks:
  - name: Create a VirtualHost file for each enabled VirtualHost
    template:
      src=vhost.j2
      dest="/etc/apache2/sites-available/"{{ item.servername }} 
      owner=root
      group=root
      mode=0644
    with_items: apache_vhosts_enabled

Die relevanten Auszüge im Template sehen so aus.

vi vhost.j2 
    <VirtualHost *:443>
        ServerName {{ item.servername }}
        DocumentRoot /var/www/{{ item.documentrootdir }}
        ServerAdmin {{ item.serveradmin }}
        SuexecUserGroup  {{  item.SuexecUserGroup }}
        DirectoryIndex  {{ item.DirectoryIndex }}
        <Directory "/var/www/{{ item.documentrootdir }}">
            Options {{ item.Options }}
            Order allow,deny
            allow from all
        </Directory>
        CustomLog /var/www/{{ item.logrootdir }}/access.log common
        ErrorLog /var/www/{{ item.logrootdir }}/error.log
        SSLEngine on
{% if item.SSLVerifyClient is defined %}
        SSLVerifyClient require
        SSLVerifyDepth  1
{% endif %}
        SSLCertificateFile /etc/ssl/{{ item.SSLCertificateFile }}
        SSLCertificateKeyFile /etc/ssl/{{ item.SSLCertificateKeyFile }}
        SSLCACertificateFile /etc/ssl/{{ item.SSLCACertificateFile }}
        SSLProtocol All -SSLv2 -SSLv3
        ....
    ....
</VirtualHost>

Über den Befehl

ansible-playbook vhost.yml 

wird dann die Datei aus dem Template und den Variablen zusammengesetzt und über SSH auf dem Server deployed. Man könnte das Playbook jetzt auch noch erweitern das automatisch der Apache einen Reload macht aber am Anfang möchte ich die Ergebnisse erst noch einmal manuell prüfen bevor sie “scharf geschaltet” werden.

Dies ist mein erster Server den ich so konfiguriere und über die Variablen im Playbook und die “is defined” Abfragen im Template werden nach und nach noch weitere Server aufgenommen.

9.10.14
Weitere Beiträge zu: Apache   Ansible  

Schriftarten auf Webseiten komprimieren

Verwendet man zusätzliche Schriften in seiner Webseite können diese schon relativ groß werden. Besser wäre es diese durch den Webserver komprimieren zu lassen. Dies geschieht nicht automatisch.

Prüfen kann man diese zum Beispiel durch folgenden Befehl (übernommen von hier)

curl -I -H 'Accept-Encoding: gzip,deflate' http://www.1bis3.de/templates/xtc5/fonts/Cabin/Cabin-Regular.ttf
HTTP/1.1 200 OK
Date: Fri, 22 Feb 2013 08:07:09 GMT
Server: Apache
Last-Modified: Tue, 01 Jan 2013 16:35:46 GMT
Accept-Ranges: bytes
Content-Length: 188320
Cache-Control: max-age=1
Expires: Fri, 22 Feb 2013 08:07:10 GMT
Content-Type: text/plain; charset=ISO-8859-15

Keine komprimierung :-( Wenn man zuerst einen neuen Mimetyp und dann dafür eine komprimierungsanweisung angibt.

vi /etc/apache2/mods-enabled/mime.conf
     Addtype font/opentype .otf 
     Addtype font/truetype .ttf

vi /etc/apache2/mods-enabled/deflate.conf
      AddOutputFilterByType DEFLATE font/opentype font/truetype

/etc/init.d/apache2 reload

und dann klappt es auch mit der Komprimierung

curl -I -H 'Accept-Encoding: gzip,deflate' http://www.1bis3.de/templates/xtc5/fonts/Cabin/Cabin-Regular.ttf
HTTP/1.1 200 OK
Date: Fri, 22 Feb 2013 08:08:13 GMT
Server: Apache
Last-Modified: Tue, 01 Jan 2013 16:35:46 GMT
Accept-Ranges: bytes
Cache-Control: max-age=1
Expires: Fri, 22 Feb 2013 08:08:14 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: font/truetype

 

22.2.13
Weitere Beiträge zu: Apache  

Web Seiten Performance mit mod_pagespeed steigern

mod_pagespeed ist ein Apache Modul von Google das nach eigenen Worten die Webseiten schneller macht und Ladezeiten reduziert. Es soll Perfomance Best Practises anwenden ohne die existierenden Anwendungen zu verändern. Hört sich erstmal nicht schlecht an.

Die installation ist recht einfach

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb
# dpkg -i mod-pagespeed-*.deb
Entpacken von mod-pagespeed-stable (aus mod-pagespeed-stable_current_i386.deb) ...
mod-pagespeed-stable (1.0.22.7-r2005) wird eingerichtet ...
Enabling module pagespeed.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Ich habe auf zwei Webseiten einen Test vorher und nachher durchgeführt. Die Ergebnisse sind zwar nicht überwältigend aber für diese 5 minütige Installation schon nicht schlecht.

Mal sehen was man noch in der Standardeinstellung verbessern kann.

28.10.12
Weitere Beiträge zu: Apache  

Apache Web Server: Disable HTTP TRACE

Einige Sicherheitstestwerkzeuge "meckern" wenn auf einem Apache Webserver die Methode "Track/Trace" eingeschaltet ist. In der Standardkonfiguration ist dies der Fall.

Die Methode HTTP TRACE wird eigentlich dazu benutzt um debugging Informationen zu bekommen. Es ist kein direktes Sicherheitsloch aber in manchen Szenarien kann diese Methode wohl für cross-site scripting verwendet werden. Bei Produktionsservern wird dazu geraten dies nicht zu verwenden.

Mit Telnet kann man recht einfach prüfen ob dies der Fall ist

$ telnet 192.168.221.15 80
Trying 192.168.221.15...
Connected to 192.168.221.15.
Escape character is '^]'.

dann diesen String einfügen

TRACE / HTTP/1.0

und zweimal enter drücken

HTTP/1.1 200 OK
Date: Wed, 14 Sep 2011 19:50:45 GMT
Server: Apache
Connection: close
Content-Type: message/http

TRACE / HTTP/1.0

Connection closed by foreign host.

Durch eine einfachen Konfigurationsschalter kann man dies ausschalten

vi /etc/apache2/apache2.conf

    TraceEnable off
 /etc/init.d/apache2 restart

Es gibt auch eine Methode dies auf virtueller Serverebene einzustellen die ich aber nicht verwende wenn ich es "auf einmal für alle" machen kann.

So sieht es aus wenn es ausgeschaltet wird

telnet 192.168.221.15 80
Trying 192.168.221.15...
Connected to 192.168.221.15.
Escape character is '^]'.
TRACE / HTTP/1.0

HTTP/1.1 405 Method Not Allowed
Date: Wed, 14 Sep 2011 19:52:01 GMT
Server: Apache
Allow:
Vary: Accept-Encoding
Content-Length: 288
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
<hr>
<address>Apache Server at 761X Port 80</address>
</body></html>
Connection closed by foreign host.

 

14.9.11
Weitere Beiträge zu: Apache  

Apache Web Server Verzeichnis nur mit https

Ich wollte ein bestimmten administrativen Bereich einer Webanwendung auf dem Apache Webserver nur mit https statt mit http verwenden. Die dort notwendige Anmeldung soll immer verschlüsselt sein.

Mit folgenden Regeln in der .htaccess konnte ich das erreichen.

vi admin/.htaccess

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} admin
RewriteRule ^(.*)$ https://hgnb.de/admin/$1 [R,L]

15.6.11
Weitere Beiträge zu: Apache  

Apache Web Server Verzeichnis mit htaccess absichern

Nachdem ich das jetzt schon wiederhohlt bei Google gesucht habe hier meine persönlichen Notizen wie man ein Verzeichniss auf dem Apache Webserver absichern kann. Dies mache ich zusätzlich zu vielleicht vorhanden Anmeldeverfahren von PHP Anwendungen.

Erstelle eine Datei mit dem Namen .htaccess in dem Verzeichnis das geschützt werden soll:

AuthUserFile /pfad/zu/der/.htpasswd
AuthGroupFile /dev/null
AuthName  "Anwendungsname den es zu schuetzen gilt"
AuthType Basic
require user yourusername

Erstelle eine Datei mit einem verschlüsselten Password und dem Namen .htpasswd ausserhalb des html Verzeichnisses (am einfachsten eins höher)

cd /pfad/zu/der/.htpasswd
htpasswd -c .htpasswd yourusername

USE AT YOUR OWN RISK

11.6.11
Weitere Beiträge zu: Apache  

Apache Webserver: Zeitgesteuert prüfen und eventuell neustarten

apache.jpeg

Eigentlich ist der Apache Web Server sehr stabil. Im normalen Betrieb habe ich bisher keinerlei Abstürze erlebt. Einzig bei einem Reload in der Nacht beim Wechsel der Logfiles oder bei einem Update aufgrund von Sicherheitpatches kommt es ab und zu vor das der Webserver nicht richtig started.

Folgendes Script prüft ob ein Apaches Service läuft. Wenn nicht dann wird er neugestartet. Inspiration kam von hier

vi apache-test.sh

#!/bin/sh
run=`ps ax | grep /usr/sbin/apache2 | grep -v grep | cut -c1-5 | paste -s -`
if [ -z "$run" ];
then
/etc/init.d/apache2 start
fi

Jetzt noch ausführbar machen und in Crontab installieren

chmod +x apache-test.sh

crontab -e
*/10 * * * * /root/apache-test.sh

21.5.10
Weitere Beiträge zu: Apache  

Webseiten Optimierung mit YSlow

Auf dem Yahoo Developer Network habe ich ein interessantes Firefoxplugin names YSlow gefunden. Damit kann man Web Sites analysieren und man bekommt Vorschläge, wie man diese Seite optimieren kann. Die Vorschläge basieren auf ca 30 Best Practises aus sieben Kategorien. Wenn man nach der Installation des Plugins den Test auf der Seite laufen läst bekommt man eine Einstufung mit einem Performance Score. Zu Begin sahen die diese Websites auf meinem Server so aus. (Ich hatte die letzten paar Tagen viele Bilder)201005-website-optimierung-score-beginn.png201005-website-optimierung-statistik-begin.png

Ich hätte offen gesagt mit Schlimmerem gerechnet da ich mich mit dem dem Thema Performance noch nicht auseinander gesetzt hatte. Ich habe mich entschlossen zu Begin mit zwei Dingen zu beginnen die ich auf dem Server einstellen kann ohne die Anwendungen anfassen zu müssen. Komprimierung und Expiration. Ich hatte zwar schon Kompression für Text eingeschaltet aber noch nicht für CSS und Javascript. Expiration hatte ich noch nichts gemacht.

1. Schritt: Komprimierung CSS Files und Javascript

Module einschalten und Konfigurationsdatei ändern

a2enmod expires

vi /etc/apache2/mods-enabled/deflate.conf

    <IfModule mod_deflate.c>
             AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
    </IfModule>

2. Einstellen von Ablaufdaten (Expiration)

Hier gabs eine Besonderheit. Die Webcam in einem Meisenkasten (den ich zum Zeitpunkt des Schreibens dieses Artikels in Betrieb hatte) hat regelmässig ein Bild aktualisiert. Hier konnte ich natürlich nicht mit einem Ablaufdatum arbeiten wenn sich die Dateie alle 10 Minuten ändert.

Modul einschalten und konfigurieren

a2enmod expires
Enabling module expires.
Run '/etc/init.d/apache2 restart' to activate new configuration!

vi /etc/apache2/mods-enabled/expires.conf

   ExpiresActive On
   ExpiresDefault A0
   ExpiresByType image/gif A2592000
   ExpiresByType image/png A2592000
   ExpiresByType image/jpg A2592000
   ExpiresByType image/jpeg A2592000
   ExpiresByType image/ico A2592000
   ExpiresByType text/css A2592000
   ExpiresByType text/js A2592000
   ExpiresByType text/javascript A2592000
   ExpiresByType application/javascript A2592000
   ExpiresByType application/x-javascript A2592000

<FilesMatch "meisen-cam.jpg">
    ExpiresActive Off
</FilesMatch>

/etc/init.d/apache2 restart

Ergebnis:

Zum einen ist die "gefühlte" Geschwindigkeit deutlich gestiegen. Hier die Statistik danach

201005-website-optimierung-score-danach.png201005-website-optimierung-statistik-danach.png

Man kann erkennen das die Texte deutlich kleiner geworden sind und beim zweiten Besuch deutlich weniger Anfragen an den Server gehen.

Wie gehts weiter?

Ich habe mal auf anderen grossen Webseiten "rumgeschaut" und war erstaut wie viele diese recht einfachen Dinge nicht machen. Ich kann jetzt noch ein oder zwei Dinge verbessern aber dafür muss ich die Anwendungen anfassen. Ich könnte

  • die CSS Dateien zusammenfassen (momentan sind es mehrere)
  • Bilder auf eine Domaine legen die keinen Cookie vergibt
  • ein Content Delivery Network nutzen. (Bilder auf verschiedene Server verteilen)

Die ersten beide gehe ich vielleicht noch an. Der letzte Punkt ist mit Sicherheit überdimensioniert :-) Für eine Anwendung auf diesem Server habe ich Google Performance Daten. Mal sehen wie die in ein paar Tagen aussehen.

13.5.10
Weitere Beiträge zu: Apache   YSlow  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License