Webseiten beschleunigen – Übersicht

Der Artikel beschreibt, wie man seine Webseite bzw. seinen Server analysiert und optimiert um Performance zu gewinnen, Ladezeit zu reduzierten bzw. Traffic einzusparen. Man kann einiges an Performance gewinnen, indem man z.B. Bilder im richtigen Format abspeichert bzw. komprimiert, CSS- / JS-Dateien kombiniert und ebenfalls komprimiert oder auch bestimmt Daten vorkomprimiert zur Verfügung stellt.

1.) Webseiten Analyse
1.1) Webseiten Benchmark

2.) Komprimierung
2.1) Bilder komprimieren
2.1.1) Bilder Sprites
2.1.2) PNG-Bilder komprimieren
2.1.3) JPEG-Bilder komprimieren
2.1.4) Bilder komprimieren – Online
2.2) JavaScript/CSS komprimieren
2.2.1) JavaScript/CSS komprimieren – serverseitig
2.2.2) JavaScript/CSS komprimieren – Online
2.3) Apache gzip-Kompression
2.3.1) Aktiviere mod_deflate (gzip) – serverseitig
2.3.2) Aktiviere mod_gzip – serverseitig
2.3.3) Aktiviere gzip – manuell

3.) JavaScript richtig im HTML-Code platzieren

4.) Browser-Cache nutzen
4.1) Browser-Cache manuell einstellen
4.2) Browser-Cache serverseitig einstellen

5.) Webserver beschleunigen
5.1) Apache-Module deaktivieren
5.2) Reverse Proxy (Nginx)
5.3) Nginx als Webserver
5.4) Nginx mit Varnish (Proxy)

6.) PHP optimieren/caching
6.1) PHP-Daten zwischenspeichern
6.2) SQL-Abfrage mittels PHP zwischenspeichern
6.3) PHP-Module deaktivieren
6.4) php.ini (Konfiguration) optimieren

7.) MySQL optimieren
7.1) MariaDB (MySQL-Fork)


Zusammenfassung

Abschließend möchte ich diesen Thema noch einmal kurz zusammenfassen, so dass man ggf. selber weitere Möglichkeiten erkennt, die Ladegeschwindigkeit seiner Webseite zu verbessern, jedoch nicht auf die Technische Umsetzung eingehen.

Kenne deinen Feind !!!

80 bis 90% der schlechten Performance liegt an der Webseite selber und nicht auf der Serverseite, solange nur wenig Besucher auf deiner Webseite sind, braucht man sich eigentlich um einen Revere-Proxy oder eine alternative zu Apache keine oder zumindest nur wenig Gedanken machen, da die Performance erst mit steigender Besucherzahl einbricht. Jedoch sollte man in jedem Fall die gzip-Komprimierung und den Browser-Cache nutzen.

Externe Dateien (Bilder, JS, CSS, Videos…)

Jeder Aufruf einer Datei kostet Performance und Bandbreite, daher sollte man im allgemeinen weniger Requests produzieren, indem man z.B. JS- bzw. CSS-Dateien kombiniert. Dieser negative Einwirkung steigt dramatisch bei externen Dateien von andern Servern und besonders dann, wenn dieser gerade mal nicht erreichbar ist.

Scripte

Immer wenn eine Browser eine Webseite abruft und im HTML-Code ein Script finde, wird das weitere laden der Webseite eingestellt und erst-einmal die JavaScript Engine damit beansprucht, diesen zu interpretieren. Daher sollte man diese Dateien erst am Ende der Webseite laden lassen, so dass der User die Webseite früher sehen kann, auch wenn z.B. die Animation des Menüs erst nach nachgeladen werden muss. Mit diesem Ansatz, erscheint es nur Sinnvoll CSS-Daten am Anfang laden zu lassen, so dass sich die Webseite dem User direkt im korrektem Layout präsentiert.

Bilder

Ein weites großer Bereich sind Bilder, dabei muss man jedoch ein gutes Mittelmaß an Text und Bildern finden, da die User zwar Bilder immer schön finden.. Logo, Hintergrundbild u.s.w. jedoch macht es nur wenig Sinn seine selbst jeder kleine Datei zu optimieren, wenn man oben über der Webseite ein 300 KB großes Bild eingefügt hat. Wie bereit im Artikel beschrieben gibt es jedoch zahlreiche Methoden (PNG- und JPEG-Dateien) diese zu optimieren.

Yahoo hat zudem eine sehr umfassende Liste von weiteren Regeln zusammengestellt, welche man beachten sollte.

Debian Etch – Support endet heute

Wie das Debian Security Team bereits vor einiger Zeit bekannt gegeben hat, endet der Support für Debian 4.0 (Etch) am 15. Februar diesen Jahres, also heute. Wer noch einen Server mit Debian 4.0 betreibt sollte daher in den nächsten Tagen auf Debian 5.0 updaten.

Lenny
Lenny

Link:
www.howtoforge.de

Spammer/Hacker fernhalten (Apache2)

mod_spamhaus ist ein Apache-Modul, welches deine Webseite vor Spammern und Hackern schützen kann, indem “böse” IP-Adressen keinen Zugriff mehr auf deine Webseite bekommen, für diesen Zweck wird auf eine “DNS-based Blackhole List” (DNSBL) zurückgegriffen.

Es gibt mehrere Möglichkeiten dieses Modul zu installieren…

1.) selber bauen

aptitude install apache2-prefork-dev
wget http://switch.dl.sourceforge.net/project/mod-spamhaus/mod-spamhaus/0.7/mod-spamhaus-0.7.tar.gz
tar zxvf mod-spamhaus-0.7.tar.gz
cd mod-spamhaus
make
make install
vim /etc/apache2/httpd.conf

LoadModule spamhaus_module /usr/lib/apache2/modules/mod_spamhaus.so

vim /etc/apache2/apache2.conf

[…]
MS_METHODS POST,PUT,OPTIONS,CONNECT
MS_WhiteList /etc/spamhaus.whitelist
MS_CacheSize 256
[…]

touch /etc/spamhaus.whitelist
/etc/init.d/apache2 restart

2.) neue Debian-Pakete

Falls du bereits Debian >= Squeeze einsetzt, kannst du diese Apache-Erweiterung bereits ohne jegliche Änderung am System mittels folgendem Befehl installieren.

aptitude install libapache2-mod-spamhaus

andernfalls kannst du dieses Paket erlauben, Daten aus dem Squeeze-Repository zu installieren…

sudo bash
echo “deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free” >> /etc/apt/sources.list
echo “deb-src http://ftp.de.debian.org/debian/ squeeze main contrib non-free” >> /etc/apt/sources.list
apt-get update
vim /etc/apt/preferences

Package: libapache2-mod-spamhaus
Pin: release a=squeeze
Pin-Priority: 999

aptitude install libapache2-mod-spamhaus
a2enmod mod-spamhaus
/etc/init.d/apache2 restart

nach der Installation wirst du bald Einträge ähnlich dem folgendem finden

[ … ]
[Mon Dec 01 00:05:26 2008] [error] [client 149.156.67.236] denied by DNSBL: sbl-xbl.spamhaus.org for: /news.php
[ … ]

Die größten dpkg-Pakete auf Ubuntu/Debian ermitteln

Folgendermaßen findest du heraus, welche bereits installierten Pakete am meisten Festplattenplatz verbrauchen:

dpkg-query --show --showformat='${Package;-50}t${Installed-Size}n' | sort -k 2 -n | grep -v deinstall | awk '{printf "%.3f MB t %sn", $2/(1024), $1}'

Installiere VMware Tools auf Debian Lenny

Um die VMware Tools zu installieren, wobei dann auch die passenden Treiber kompiliert werden, muss man bei eine neu installierten Debian Version einige Pakete nachinstallieren. Zudem ist der Kernel mit einer älteren gcc kompiliert.

1.) einige Pakete nach-installieren

aptitude install psmisc binutils gcc-4.1-base make linux-headers-$(uname -r)

2.) nach-schauen mit welchem gcc-Version der laufende Kernel kompiliert wurde und dann ggf. gcc anpassen

cat /proc/version

und dann ggf.

export CC=/usr/bin/gcc-4.1
rm /usr/bin/gcc
ln -s /usr/bin/gcc-4.1 /usr/bin/gcc

3.) folgendes erlaubt es dem VMware Daemon nach einen reboot auch wieder zu starten

ln -s /usr/lib/libexpat.so.1 /usr/lib/libexpat.so.0

4.) In dem VMware (ESXi) Client auf deiner Windows Arbeitsstation musst du nun die VMware cd in das virtuelle Laufwerk einlegen

Inventory -> Virtual Machine -> Install/Upgrade VMware Tools

5.) mounten die CD und kopieren den Inhalt weg, dann wieder unmounten und die Installation starten

mount /dev/cdrom[0-9] /mnt
cp -v /mnt/VMwareTools-3.5*.gz /usr/src/
umount /mnt
cd /usr/src/ ; tar xvf VMwareTools-3.5*.gz
cd vmware-tools-distrib/
./vmware-install.pl
mv /usr/bin/gcc_new /usr/bin/gcc

Nach einem Reboot läuft Debian nun mit den VMware Tools. Alternativ gibt es für Debian auch noch die open-vm-tools.

aptitude install open-vm-source
module-assistant prepare open-vm
module-assistant auto-install open-vm
aptitude install open-vm-tools
reboot

dpkg-repack – Installationen neu einpacken

Auf Debian basierendem Systemen (z.B. Ubuntu) kannst du bereits installierte Pakete neu einpacken und in ein .deb Datei speichern, um dieses z.B. mit der selben Konfiguration auf einem anderem System zu installieren.

Installation:

aptitude install dpkg-repack

Syntax:

dpkg-repack [--root=dir] [--arch=architecture] [--generate] packagename [packagename ...]

weitere Infos zu “dpkg-repack” findest du in der Man-Page

man dpkg-repack

MySQL-Server beschleunigen

Nutze Google’s perftools um die Geschwindigkeit deines MySQL-Server zu erhöhen.

Das Google Perftools, insbesondere tcmalloc (Thread Caching Malloc), kann helfen z.B. den MySQL-Server zu beschleunigen…

TCMalloc ist schneller als die glibc 2.3 malloc (Wiki). Die Geschwindigkeitsvorteile durch die verbesserte Speicherzuordnung, kannst du wie folgt in MySQL integrieren.

Vorausgesetzt du nutzt Debian 5 (Lenny) oder neuer… fügen wir als erstes neue Repositories in der sources.list ein.

echo 'deb http://dotdeb.netmirror.org/ stable all' >> /etc/apt/sources.list
echo 'deb-src http://dotdeb.netmirror.org/ stable all' >> /etc/apt/sources.list

und aktualisieren ggf. den MySQL-Server auf Version 5.1

apt-get update
aptitude install mysql-server-5.1
aptitude install libtcmalloc-minimal0

Seit den mainstream MySQL-Paketen sind diese nicht mit den tcmalloc compiliert, daher müssen wir einen dynamischen OS’ Linker einbauen, indem wir folgende Zeile in dem MySQL init-Skript einfügen:

vim /etc/init.d/mysql

export LD_PRELOAD=”/usr/lib/libtcmalloc_minimal.so.0″

Capture - libtcmalloc
Capture - libtcmalloc

Nach einen restart des MySQL-Servers durch das init-Skript, profitiert dieser nun von der schnellern Speicherzuteilung.

/etc/init.d/mysql restart

Link:
www.dotdeb.org

aptitude & dpkg

Das dpkg-Programm war Anfangs dafür gedacht, dass man seine installierten Pakete verwalten kann. Doch man brauchte auch noch ein Programm welches schnell, praktisch und effizient im Umgang mit Pakete ist, so sollte es Pakete installieren, dessen Abhängigkeiten automatisch behandeln und ihre Konfigurationsdateien während des Aktualisierens berücksichtigen, genau für diesen Zweck wurde dann APT (Advanced Packaging Tool) entwickelt.

dpkg:

dpkg -l

z.B.:

dpkg -l | awk '{print $2}'

-> zeigt alle installierten Pakete an
(zeigt nur die installierten Paket-Namen an)

dpkg -l "*"

-> zeigt aller verfügbaren Pakete an

dpkg -l irgendwas

-> zeigt alle Pakete an in dessen Namen “irgendwas” vorkommt

dpkg -p paket

-> anzeigen von Informationen (z.B. Beschreibung, Größe, Version…) von installierten Paketen an

dpkg -i programm.deb

-> lokales Paket installieren

dpkg -r paket

-> (–remove) Paket deinstallieren (Konfiguration wird beibehalten)

dpkg -p paket

-> (–purge) Paket deinstallieren (auch die Konfiguration)

dpkg -S irgendwas

z.B.:

dpkg -S `which ls`

-> zeigt alle installierten Dateien und dazugehörige Pakete zu dem Suchbegriff “irgendwas” an
(zeigt das Paket an, zu dem das Programm “ls” gehört)

dpkg -L paket

-> zeigt die zugehörigen Dateien zu einem installierten Paket an

dpkg-reconfigure paket

-> konfiguriert ein Paket neu

dpkg-statoverride --update --add

-> überschreibt die Rechte für die eine Datei, auch nach einem Update

z.B.:

dpkg-statoverride --update --add nagios www-data 660 /var/lib/icinga/rw/icinga.cmd

-> chown nagios:www-data && chmod 660 – wird nach Updates auf die angegebene Datei durchgeführt

dpkg-statoverride --remove

-> setzt die Rechte einer Datei wieder auf den Standard zurück

dpkg-statoverride --list

-> zeigt die veränderten Dateien an

 

aptitude:

aptitude update

-> Update von allen Einträgen in /etc/apt/sources.list

aptitude upgrade

-> Upgrade, wenn ein Paket veraltet ist

aptitude install paket

-> Installiert das Paket “paket” und ggf. dessen Abhängigkeiten

aptitude remove paket

-> Paket deinstallieren (Konfiguration wird beibehalten)

aptitude purge paket

-> Paket deinstallieren (auch die Konfiguration)

aptitude search irgendwas

-> Sucht in allen Beschreibungen und Paket-Namen nach “irgendwas”

aptitude show paket

-> anzeigen von Informationen (z.B. Beschreibung, Größe, Version…)

aptitude -t

-> führt aptitude mit einem bestimmten Repository aus (Repository -> /etc/apt/sources.list)
z.B.:

aptitude -t etch-backports -V install clamav clamav-daemon clamav-freshclam

Grafischer-Modus in der Konsole:

aptitude

F10 : Zeigt das Menü an

(Info: Wenn du die Konsole auf deinem Desktop öffnest, kannst du auch mit der Maus auf das Menü klicken)

q : Ende oder Zurück (quit)

u : Update die Paket Liste (sourcres.list)

/ : Suche nach einem Paket

n : Noch mal nach dem selben suchen (next)

f : “new packages” verwerfen

Wenn du dein gesuchtes Paket nun gefunden hast:

+ : Markiert das Paket zum installieren oder updaten
: Markiert das Paket zum deinstallieren
_ : Markiert ein Paket zum purging (siehe oben)
: : Bricht alle Aktionen für ein Paket ab
b : Zeigt Abhängigkeitsprobleme an
! : Versucht Abhängigkeitsprobleme zu lösen
. : um zu versuchen die Abhängigkeiten anders aufzulösen
U : Markiert alle vorhanden Upgrades zum installieren

Wenn du nun mit deiner Auswahl zufrieden bist:

g : Zum zustimmen und zur Übersicht gehen (an dieser Stelle löst aptitude die Abhängigkeiten automatisch auf), dort musst du mit wiederholten “g” diese Übersicht bestätigen. Fertig.

Tipp: RegEx für aptitude

Man kann auch via RegEx suchen (sowohl in der “GUI” aus auch auf der Kommandozeile) z.B.: ^ack-grep$

Erlaubte RegEx: “.” – “+”, “”, “(“, “)”, “|”, “[“, “]”, “^”, “$”, “?”

 

Quellen:
https://www.debian.org/doc/manuals/debian-reference/ch02.de.html
http://wiki.ubuntuusers.de/dpkg
http://wiki.ubuntuusers.de/apt/apt-get
http://wiki.ubuntuusers.de/aptitude

DynDNS – HowTo

Heute beschreibe ich, wie ihr auf euren Rechner von überall auf der Welt zugreifen könnt. Ich gehe erstmal davon aus, dass du keine feste IP-Adresse zu hause hast. Dein Router wählt sich bei deinem Provider ein und bekommt jedes mal, eine neue IP, dieses “Einwählen” macht der Router meist alle 24 Stunden, das heißt, dass du jeden Tag eine neue IP bekommst.

1.) Auf DynDNS.com registrieren und einen Domain Namen registrieren

Als erstes müssen wir also dafür sorgen, dass deine Internetverbindung eindeutig zugeordnet werden kann, dies realisieren wie am einfachsten über www.DynDNS.com. Wir müssen uns auf dyndns.com kostenlos registrieren und den Dienst nutzen zu können, dann unter der Kategorie “Account” und anschließend auf “Add Host Services” klicken. Hier kannst du dir nun einen Hostnamen (max. 5 Stück) aussuchen, unter welcher dein Internet Anschluss (Router) zu erreichen ist.



dynDNS
DynDNS


 

2.) Eingene IP übermitteln

Im nächsten Schritt müssen wir dafür sorgen, dass entweder dein Router oder dein PC deine momentane IP an dynDNS übermittelt. Wenn dein Router dies unterstützt, dann bei Punkt 2.1 weiter lesen, wenn nicht dann geht es nun mit dem Punkt 2.2 weiter.

2.1) IP übermitteln (mit deinem Router)

Deinen Router erreichst du meinst unter der letzten oder ersten IP in deinem Netz z.B. 192.168.1.254. Schau einfach in deinen Netzwerk Einstellungen welche IP du im Augenblick als Standart Gateway eingetragen (oder per DHCP zugewiesen bekommen hast) ist, diese IP gibst du in deinem Browser ein. Hier ein kleines Beispiel:



fritz_dyndns
fritzBox - dyndns

2.2) IP übermitteln (mit deinen PC/Server per Software/Client)


-> Windows – Update Client

-> Windows7 – Update Clients

-> Mac/OS X – Update Client

-> Linux/Unix – Update Clients


Nun müssen wir die passende Software zu unserm System installieren, da die Installation unter Windows kein Problem darstellen dürft, erkläre ich nur kurz wie man dies unter Linux macht.

apt-get  update
aptitude install ddclient

Danach muss folgende Config-Datei angepasst werden ->

vim /etc/ddclient.conf

Nachdem du dich mit deinem Benutzernamen auf der Webseite dyndns.com angemeldet hast gehst du auf folgender Seite um ihre passende ddclient Config zu generieren -> Clientconfig


Diese ersetzen wir nun mit der zuvor erwähnten Datei. Damit du sowohl unter test.dyndns.test als auch www.test.dyndns.test erreichbar bist, musst du in der Konfig-Datei noch folgendes ergänzen ->

wildcard=yes

nun noch schnell den Client restarten

/etc/init.d/ddclient restart

führe folgenden Befehl in Terminal aus, um zu überprüfen ob ddclient läuft

/etc/init.d/ddclient status

3.) PC erreichbar machen

-> Was ist PortForwarding?


Das Stichwort Port Forwarding habe ich mal als erstes in den Raum geworfen, dein Router schickt z.B. anfragen mit dem Ziel-Port 22, an die dafür vorgesehene IP. Hier ein Beispiel wo der SSH-Port 22 (TCP) weitergeleitet wird.

Protocol Port Range Translate To … Trigger Protocol Trigger Port
TCP 22 – 22 22 – 22

Hier noch eine sehr nützliche Seite: http://www.portforward.com/english/routers/port_forwarding/routerindex.htm

4.) SSH installieren & testen

auf deinem Ziel-System musst du den SSH-Daemon installieren und wenn das noch nicht passiert ist, ein Passwort/User anlegen

aptitude install ssh

und ggf.

passwd

nun können wir uns von überall aus zu unserm Home-Server verbinden…

ssh user@test.dyndns.test

Install Foxit-Reader 1.1.0

cd ~/Desktop
wget http://mirrors.foxitsoftware.com/pub/foxit/reader/desktop/linux/1.x/1.1/enu/FoxitReader_1.1.0_i386.deb

fuer 32-Bit Systeme:

sudo dpkg -i FoxitReader_1.1.0_i386.deb

fuer 64-Bit Systeme:

sudo dpkg -i --force-architecture FoxitReader_1.1.0_i386.deb
rm FoxitReader_1.1.0_i386.deb

Link:
www.foxitsoftware.com/pdf/desklinux/download.html