<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stetix &#187; apache</title>
	<atom:link href="http://stetix.de/tag/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://stetix.de</link>
	<description>Gedanken über Web-Development, Webdesign, Technik, Handys, Musik, Vinyl, Gadgeds und mehr..</description>
	<lastBuildDate>Thu, 12 Apr 2012 20:35:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Nginx: Eine echte Apache Alternative! Vorteile, Installation und Konfiguration des Webservers unter Linux erklärt.</title>
		<link>http://stetix.de/nginx-eine-echte-apache-alternative.html</link>
		<comments>http://stetix.de/nginx-eine-echte-apache-alternative.html#comments</comments>
		<pubDate>Tue, 01 Mar 2011 16:25:22 +0000</pubDate>
		<dc:creator>Nico</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://stetix.de/?p=1087</guid>
		<description><![CDATA[Der Apache-Webserver ist das Non Plus Ultra in Sachen Webserver-Software. Seit mehr als 15 Jahren führt der Platzhirsch die Liste der meist genutzen Webserver an. Aktuell, im Februar 2011, werden bei Netcraft 171,195,554 Hostnamen mit Installationen des Apachen gemessen. Das sind 60.10% aller Webserver-Installationen weltweit. Marktanteile Top-Server über alle Domains Aug. 1995 &#8211; Feb. 2011. [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Der <a href="http://httpd.apache.org/" target="_blank">Apache-Webserver</a> ist das Non Plus Ultra in Sachen Webserver-Software. Seit mehr als 15 Jahren führt der Platzhirsch die Liste der meist genutzen Webserver an. Aktuell, im Februar 2011, werden bei <a href="http://news.netcraft.com/" target="_blank">Netcraft</a> 171,195,554 <a href="http://de.wikipedia.org/wiki/Hostname" target="_blank">Hostnamen</a> mit Installationen des Apachen gemessen. Das sind 60.10% aller Webserver-Installationen weltweit.</p>
<p><img src="http://stetix.de/wp-content/uploads/2011/03/webserver-usage-1995-2011.png" alt="webserver usage 1995 2011 Nginx: Eine echte Apache Alternative! Vorteile, Installation und Konfiguration des Webservers unter Linux erklärt." title="webserver-usage-1995-2011" width="550" height="300" class="alignnone size-full wp-image-1743" /><br />
<small style="color: #888;">Marktanteile Top-Server über alle Domains Aug. 1995 &#8211; Feb. 2011. Quelle: <a href="http://news.netcraft.com/archives/2011/02/15/february-2011-web-server-survey.html" target="_blank">netcraft.com</a></small></p>
<p>Seine weite Verbreitung, immerhin ist der Apache fast bei jedem Betriebssystem außer Windows dabei, die Anzahl der erhältlichen Erweiterungen und Module und die relativ leichte Konfiguration, auch in Massenhosting-Umgebungen, machen den Apache auch für Einsteiger zu einem Webserver der ersten Wahl. Wer jedoch mit viel Traffic zu tun hat und dabei eine <a href="http://de.wikipedia.org/wiki/Skriptsprache#Beispiele:_serverseitig" target="_blank">serverseitige Skriptsprache</a> wie PHP, Perl, Ruby oder ähnliches einsetzt, wird mit dem Apachen früher oder später an seine Grenzen stossen. Es ist mit Hilfe von Reduzierung auf wesentliche Module, <a href="http://httpd.apache.org/docs/2.0/misc/perf-tuning.html" target="_blank">Performance-Tuning</a> und Tuning des Linux Systems natürlich sehr viel raus zu holen, doch irgendwann steht die Frage nach einer Alternative im Raum.</p>
<p><span id="more-1087"></span></p>
<p><img src="http://stetix.de/wp-content/uploads/2011/03/nginx-logo.jpg" alt="nginx logo Nginx: Eine echte Apache Alternative! Vorteile, Installation und Konfiguration des Webservers unter Linux erklärt." title="nginx-logo" width="640" height="139" class="alignnone size-full wp-image-1732" /></p>
<h3>Der Webserver nginx</h3>
<p>Hier war bis vor wenigen Jahren gerade im Linux-Bereich der Webserver <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a> auf dem Weg eine echte Alternative zu werden, wurde jedoch im Jahr 2008 sehr schnell von einem Webserver Namens <a href="http://nginx.org/" target="_blank">nginx</a> überholt. nginx hat aktuell eine Verbreitung von 7.57% auf 21,570,463 Hosts. Tendenz startk steigend.<br />
Der von Igor Sysoev ursprünglich für die russische Suchmaschine <a href="http://www.rambler.ru/" target="_blank">Rambler</a> entwickelte nginx-Webserver, der auch als Reverse Proxy und E-Mail-Proxy verwendet werden kann, zeichnet sich durch seine hohe Performance und leichte Konfiguration aus. Gerade in Sachen Performance hat er den Apache schon einige Male <a href="http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/" target="_blank">in</a> <a href="http://www.pcdoctor-community.com/blog/posts/2008/05/15/Nginx-vs.-Apache2-in-Rails-Running-Death-Match/" target="_blank">die</a> <a href="http://turnkeye.com/blog/2010/05/nginx-vs-litespeed-magento-benchmark-tests/" target="_blank">Ecke</a> <a href="http://www.elbcoast.net/?p=77" target="_blank">verwiesen</a>. nginx wird auch bereits von vielen High-Traffic-Seiten wie beispielsweise <a href="http://www.golem.de/" target="_blank">Golem.de</a>, <a href="http://wordpress.com/" target="_blank">WordPress.com</a>, <a href="http://t3n.de/" target="_blank">t3n.de</a>, <a href="https://github.com/" target="_blank">GitHub</a> und vielen weiteren mehr eingesetzt. Auch als zusätzliche Software zum Beispiel als Load-Balancer, Proxy, SSL-Proxy oder für das Ausliefern von reinen statischen Inhalten wie Grafiken, Stylesheets oder Videos eignet sich nginx durch seine kurzen Responce-Zeiten sehr gut.</p>
<h3>nginx: Die Installation</h3>
<p>Die Software zu installieren ist im Prinzip nicht weiter schwierig, sofern man Linux-Grundkenntnisse mitbringt. Download, Configure, Make, Install, Konfigurationsfiles anpassen und fertig ist die nginx-Installation. Doch eins nach dem anderen und auch für Einsteiger etwas langsamer erklärt. Ich möchte hier an einem Beispiel aufzeigen, wie man den nginx-Webserver installiert, konfiguriert und für das Ausliefern von statischen Webseiten vorbereitet.</p>
<h4>Download des nginx</h4>
<p>Die aktuelle stabile Version erhalten wir auf der <a href="http://nginx.org/" target="_blank">Webseite des nginx</a>. Aktuell ist die Version 0.8.54 vom 14.12.2010, die man unter folgenden URL downloaden kann:<br />
<a href="http://nginx.org/download/nginx-0.8.54.tar.gz">http://nginx.org/download/nginx-0.8.54.tar.gz</a><br />
Mit Linux macht man das am besten mit <a href="http://www.gnu.org/software/wget/" target="_blank">wget</a>:</p>
<p><code># wget http://nginx.org/download/nginx-0.8.54.tar.gz<br />
</code></p>
<p>Jetzt muß man den Tarball nur noch entpacken und es kann zur Installation übergehen.</p>
<p><code># tar -xvzf nginx-0.8.54.tar.gz<br />
</code></p>
<h4>Installation des nginx</h4>
<p>Jetzt wechseln wir in das entpackte Verzeichnis. Um den nginx mit Standard-Modulen zu installieren reicht ein einfaches configure aus.</p>
<p><code># cd nginx-0.8.54<br />
# ./configure<br />
</code></p>
<p>Dies bereitet die Kompilierung des nginx in das Verzeichnis /usr/local/nginx mit Standard-Modulen wie dem HTTP-Kernmodul, HTTP-Upstreammodul, HTTP-Zugriffsmodul, HTTP-Authentifizierungsmodul und Fastcgi-Modul vor. Die Ausgabe der Zusammenfassung sollte so oder so ähnlich aussehen:</p>
<p><code>Configuration summary<br />
  + using system PCRE library<br />
  + OpenSSL library is not used<br />
  + md5: using system crypto library<br />
  + sha1 library is not used<br />
  + using system zlib library<br />
<br />
  nginx path prefix: "/usr/local/nginx"<br />
  nginx binary file: "/usr/local/nginx/sbin/nginx"<br />
  nginx configuration prefix: "/usr/local/nginx/conf"<br />
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"<br />
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"<br />
  nginx error log file: "/usr/local/nginx/logs/error.log"<br />
  nginx http access log file: "/usr/local/nginx/logs/access.log"<br />
  nginx http client request body temporary files: "client_body_temp"<br />
  nginx http proxy temporary files: "proxy_temp"<br />
  nginx http fastcgi temporary files: "fastcgi_temp"<br />
  nginx http uwsgi temporary files: "uwsgi_temp"<br />
  nginx http scgi temporary files: "scgi_temp"<br />
</code></p>
<p>Im nächsten Schritt heisst es kompilieren und installieren:</p>
<p><code># make<br />
# make install<br />
</code></p>
<p>Sollten diese beiden Make-Befehle ohne Fehler ausgeführt werden ist nginx nun unter dem Verzeichnis /usr/local/nginx installiert.</p>
<h3>nginx: Die Konfiguration</h3>
<p>Beginnen wir nun mit der Konfiguration. Im Prinzip können die Standard-Einstellungen übernommen werden, da sie für das Ausliefern von statischen Webseiten völlig ausreichend sind. Dennoch möchten wir hier einige Einstellungen variieren und jeweils noch die gewünschten Server bzw. Domains anlegen. Die Konfiguration befindet sich in der Datei /usr/local/nginx/conf/nginx.conf, die wir mit dem Editor unserer Wahl, in meine Fall der <a href="http://de.wikipedia.org/wiki/Vi">vi-Editor</a>, öffnen:</p>
<p><code># vi /usr/local/nginx/conf/nginx.conf</code></p>
<h4>Globale Server-Einstellungen</h4>
<p>An erster Stelle finden wir die globalen Einstellungen. Hier können Werte definiert werden, die für den gesamten Server gelten. Dazu gehören der User und die Gruppe unter der die Server-Prozesse laufen, Logfiles, Pidfile und Angaben zu Prozessen und MaxClients.</p>
<p><code># User und Gruppe unter der der nginx läuft<br />
user www www;<br />
<br />
# Anzahl der Worker-Prozesse<br />
worker_processes  2;<br />
<br />
# Anzahl der maximalen Worker-Connections<br />
events {<br />
    worker_connections  512;<br />
}<br />
<br />
# Ort und LogLevel der ErrorLog-Datei<br />
error_log  logs/error.log notice;<br />
<br />
# Ort des Pidfiles<br />
pid        logs/nginx.pid;<br />
</code></p>
<p>Standardmässig läuft der nginx unter dem <a href="http://wiki.nginx.org/CoreModule#user" target="_blank"><strong>User</strong></a> nobody, was wir je nach Belieben anpassen können. Allerdings sollte man einen Werbserver niemals unter dem Benutzer root laufen lassen, um eventuellen Sicherheitslücken vorzubeugen.</p>
<p>Die Anzahl der <a href="http://wiki.nginx.org/CoreModule#worker_processes" target="_blank"><strong>Worker-Prozesse</strong></a> gibt an, wieviele Prozesse gestartet werden sollen. Der nginx startet einen Master-Prozess, der die Verwaltung übernimmt und die in der Konfiguration angegebene Anzahl von Worker-Prozessen. Diese Worker-Prozesse sind für die Verbindungen zum Benutzer und das Ausliefern der Webseite zuständig. 2 Worker-Prozesse sollten für den Anfang ausreichend sein.</p>
<p>Die Anzahl der <a href="http://wiki.nginx.org/EventsModule#worker_connections" target="_blank"><strong>Worker-Connections</strong></a> bestimmt die maximale Anzahl von gleichzeitigen Verbindungen, die ein Worker-Prozess verarbeiten kann. Aus beiden Werten von worker_processes und worker_connections ergibt sich hier also die maximale Anzahl von gleichzeitigen Verbindungen für den gesamten Webserver, der so genannten auch aus der Apache-Konfiguration bekannten Variable <strong>MaxClients</strong>. Die Formel hierfür ist </p>
<p><strong><em>max_clients = worker_processes * worker_connections</em></strong></p>
<p>In unserem Fall 2 * 512 = 1024. 1024 Verbindungen sollten für den Anfang mehr als ausreichend sein und können bei Ressourcenmangel ruhig auch bis 250 minimiert werden.</p>
<p>Den Ort und LogLevel der ErrorLog-Datei, sowie den Ort des Pidfiles können wir getrost so übernehmen. </p>
<h4>HTTP Server-Einstellungen</h4>
<p>Jetzt kommen wir zur Konfiguration des HTTP-Services und der einzelnen Server. Die Standard-Einstellungen sollten angepasst werden und wurden von mir für optimale und performante Auslieferung mit Hilfe von Gzip, Cache-Einstellungen usw. optimiert. Nehmen wir als Beispiel die IP 1.2.3.4 und eine Domain Namens www.meinedomain.de mit statischen HTML-Seiten, Bildern, Stylesheets und einigen Download-Dateien im Verzeichnis /var/www/meinedomain.de/htdocs, welches natürlich vorhanden sein sollte. Auch an SEO sollten wir gleich denken, die Domain wirklich nur unter einer Domain erreichbar machen und alles andere auf diese per <a href="http://stetix.de/301-weiterleitung-einer-website-per-mod-rewrite.html">301-Weiterleitung</a> weiterleiten.</p>
<p><code>http {<br />
&nbsp;&nbsp;&nbsp;&nbsp;# die Konfiguration der Content-Typen aus conf/mime.types inkludieren<br />
&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;   mime.types;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Der Standard-Content-Typ<br />
&nbsp;&nbsp;&nbsp;&nbsp;default_type  application/octet-stream;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Support für größere Dateien<br />
&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;   on;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# HTTP Response-Header in einem Paket senden<br />
&nbsp;&nbsp;&nbsp;&nbsp;tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp; on;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Sekunden, in denen auf eine erneute Verbindung vom<br />
&nbsp;&nbsp;&nbsp;&nbsp;# gleichen Client gewartet wird<br />
&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout  65;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Disable Nagle's buffer algorithm<br />
&nbsp;&nbsp;&nbsp;&nbsp;tcp_nodelay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Gzip aktivieren, sendet komprimierte Daten zum Client<br />
&nbsp;&nbsp;&nbsp;&nbsp;gzip  on;<br />
&nbsp;&nbsp;&nbsp;&nbsp;gzip_comp_level 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;gzip_proxied any;<br />
&nbsp;&nbsp;&nbsp;&nbsp;gzip_types&nbsp;&nbsp;&nbsp;&nbsp;  text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Definition des Logfile-Formats<br />
&nbsp;&nbsp;&nbsp;&nbsp;log_format vhosts '$http_host $remote_addr - $remote_user [$time_local]  '<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '"$request" $status $body_bytes_sent '<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '"$http_referer" "$http_user_agent"';<br />
<br />
# VHost-Konfiguration<br />
server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# IP-Adresse und Port, an denen für Web-Zugriffe gelauscht wird<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;   1.2.3.4:80;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Domains, auf die dieser Server hören soll<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name  www.meinedomain.de meinedomain.de;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Hauptverzeichnis für Dokumente<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/www/meinedomain.de/htdocs;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Ort des Access-Logfiles<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log /var/www/meinedomain.de/logs/access_log vhosts;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Definition des Index-Files (Startseite, für Anfragen ohne Dateiname)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index   index.html;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Wenn Zugriff auf andere als Standarddomain,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# auf diese per 301 permanent weiterleiten<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($host != 'www.meinedomain.de' ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rewrite  ^/(.*)$  http://www.meinedomain.de/$1  permanent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Für Bilder und einige andere Dateitypen Access-Log ausschalten und<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Expire-Zeit  auf 7 Tage erhöhen (sendet den entspr. Expire-Header)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~* ^.+\.(js|css|jpg|jpeg|gif|png|pdf|zip|rar)$ {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  access_log   off;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  expires&nbsp;&nbsp;&nbsp;&nbsp;  7d;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # Nützlich für SSL und evtl. später hinzukommende Scriptsprachen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy_set_header  X-Real-IP  $remote_addr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy_set_header Host $http_host;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  proxy_redirect off;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # Wenn die angeforderete statische Datei existiert, diese ausliefern<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # ohne die anderen Regeln weiter unten zu beachten<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (-f $request_filename) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # index.html für Unterverzeichnisse<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (-f $request_filename/index.html) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rewrite (.*) $1/index.html break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
}<br />
</code></p>
<p>Die Konfiguration besteht aus dem Part http mit Definitionen für diesen Service. Hier wird zuerst die Mime-Konfiuration geladen, Einstellungen zum Connection-Verhalten gesetzt, das Gzip-Modul zum komprimieren der Daten aktiviert und die Definition des Logfile-Formates vorgenommen. Weiter finden wir innerhalb des http-Parts den server-Part, die Konfiguration der einzelnen Websites, auch genannt VHosts. Ich habe auch hier die einzelnen Direktiven oben kommentiert, weshalb ich auf weitere detailiertere Beschreibung verzichte. Im Prinzip ist alles selbsterklärend. Will man weitere Domains bzw. Server hinzufügen muß man lediglich den Part server {} kopieren. Dabei ist darauf zu achten, daß jede Konfiguration nacheinander innerhalb von http {} steht. Ab zwei Servern lohnt es sich schon, für jeden Server ein eigenes Konfigurationsfile anzulegen. Hierfür erstellt man innerhalb des conf-Verzeichnisses ein Unterverzeichnis, zum Beispiel &#8220;sites&#8221; und inkludiert die darin enthaltenen Files einfach innerhalb des http-Parts:</p>
<p><code>include /usr/local/nginx/conf/sites/*;<br />
</code></p>
<p>Jetzt kann man sich für jede Domain ein eigenes Konfigurationsfile anlegen, was wesentlich übersichtlicher ist.</p>
<h3>Das nginx Startscript</h3>
<p>Was uns jetzt noch fehlt ist, den nginx das erste Mal zu starten. Hierfür benötigen wir ein sogenanntes Startskript, welches wir z.B. <a href="https://gist.github.com/33062#file_nginx.sh" target="_blank">hier für Ubuntu</a> bekommen und unter /etc/init.d/nginx ablegen. Alternativ kann es hier kopiert und für evtl. andere Distributionen angepasst werden:</p>
<p><code>#!/bin/sh<br />
<br />
#This is a start script for nginx. Tested on Unbuntu Edge.<br />
#Should work on Ubuntu, Debian and probably a few other Linux distros.<br />
#Change DAEMON and CONFIG_FILE  if neccessary<br />
<br />
PATH=/sbin:/bin:/usr/sbin:/usr/bin<br />
<br />
#Location of nginx binary. Change path as neccessary<br />
DAEMON=/usr/local/nginx/sbin/nginx<br />
#Location of configuration file. Change path as neccessary<br />
CONFIG_FILE=/usr/local/nginx/conf/nginx.conf<br />
<br />
DAEMON_OPTS="-c $CONFIG_FILE"<br />
NAME=nginx<br />
DESC="web server"<br />
PIDFILE=/var/run/$NAME.pid<br />
SCRIPTNAME=/etc/init.d/$NAME<br />
<br />
#only run if binary can be found<br />
test -x $DAEMON || exit 0<br />
<br />
set -e<br />
<br />
#import init-functions<br />
. /lib/lsb/init-functions<br />
<br />
case "$1" in<br />
start)<br />
log_daemon_msg "Starting $DESC" $NAME<br />
if ! start-stop-daemon --start --quiet\<br />
	--pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then<br />
	log_end_msg 1<br />
	else<br />
	log_end_msg 0<br />
fi<br />
;;<br />
stop)<br />
log_daemon_msg "Stopping $DESC" $NAME<br />
if start-stop-daemon --quiet --stop --oknodo --retry 30\<br />
	--pidfile $PIDFILE --exec $DAEMON; then<br />
	rm -f $PIDFILE<br />
	log_end_msg 0<br />
	else<br />
	log_end_msg 1<br />
fi<br />
;;<br />
reload)<br />
log_daemon_msg "Reloading $DESC configuration" $NAME<br />
if start-stop-daemon --stop --signal 2 --oknodo --retry 30\<br />
	--quiet --pidfile $PIDFILE --exec $DAEMON; then<br />
	if start-stop-daemon --start --quiet  \<br />
		--pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then<br />
		log_end_msg 0<br />
		else<br />
		log_end_msg 1<br />
	fi<br />
	else<br />
	log_end_msg 1<br />
fi<br />
;;<br />
restart|force-reload)<br />
$0 stop<br />
sleep 1<br />
$0 start<br />
;;<br />
*)<br />
echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&#038;2<br />
exit 1<br />
;;<br />
esac<br />
<br />
exit 0<br />
</code></p>
<p>Jetzt noch mit <a href="http://de.wikipedia.org/wiki/Chmod" target="_blank">chmod</a> das Ausführen der Datei erlauben:</p>
<p><code># chmod 700 /etc/init.d/nginx</code></p>
<p>Nun können wir uns freuen und den nginx das erste Mal starten:</p>
<p><code># /etc/init.d/nginx start</code></p>
<p>Ist alles korrekt und das Konfigurationsfile ohne Fehler, sollte der nginx starten und die Webseite unter der konfigurierten Domain erreichbar sein.</p>
<h4>nginx Autostart</h4>
<p>Damit der nginx auch beim nächsten Server-Neustart automatisch startet, benötigen wir einen Eintrag bzw. einen <a href="http://de.wikipedia.org/wiki/Symbolische_Verkn%C3%BCpfung" target="_blank">symbolischen Link</a> im Runlevel-Startverzeichnis, hier als Beispiel für <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a>:</p>
<p><code>ln -s /etc/init.d/nginx /etc/rc2.d/S99nginx</code></p>
<p>Somit startet nginx beim nächsten Neustart des Servers im Runlevel 2 automatisch. Falls ein anderes Runlevel läuft (ersichtlich mit dem Befehl &#8220;runlevel&#8221;), einfach den Link im jeweiligen Verzeichnis erstellen.</p>
<h3>Und nun: Viel Spaß mit nginx!</h3>
<p>Das wars! Ich hoffe ich konnte Dir hier einen kleinen Einstieg in nginx vermitteln. Ein Artikel zur Verwendung von PHP und Installation von WordPress folgt demnächst. Bei Fragen, Verbesserungen oder Angregungen freue ich mich über Kommentare. </p>
<h4>Weiterführende Links</h4>
<p>- <a href="http://nginx.org/">nginx-Webseite</a><br />
- <a href="http://wiki.nginx.org/Main">nginx-Wiki</a><br />
- <a href="http://de.wikipedia.org/wiki/Nginx">nginx bei Wikipedia</a><br />
- <a href="http://wiki.ubuntuusers.de/nginx">nginx bei Ubuntu</a></p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://stetix.de/nginx-eine-echte-apache-alternative.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Session Garbage Collection in anderen Verzeichnissen unter Ubuntu und Debian</title>
		<link>http://stetix.de/php-session-garbage-collection-in-anderen-verzeichnissen-unter-ubuntu-und-debian.html</link>
		<comments>http://stetix.de/php-session-garbage-collection-in-anderen-verzeichnissen-unter-ubuntu-und-debian.html#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:10:41 +0000</pubDate>
		<dc:creator>Nico</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sessions]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://stetix.de/?p=1371</guid>
		<description><![CDATA[Eben entdeckt: Bei Ubuntu und Debian ist in PHP standardmässig die Garbage Collection deaktiviert. Diese sorgt dafür, das die Sessionfiles für abgelaufene Sessions automatisiert gelöscht werden. Bei Ubuntu und Debian löst ein Cronjob diesen Löschvorgang. Ein Problem entsteht allerdings, wenn man eigene Verzeichnisse für die Sessionfiles definiert. Hier werden die Files dann nicht gelöscht und [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><img src="http://stetix.de/wp-content/uploads/2009/10/php-icon.jpg" alt="php icon PHP Session Garbage Collection in anderen Verzeichnissen unter Ubuntu und Debian" title="php-icon" width="150" height="150" class="alignright size-full wp-image-1040" />Eben entdeckt: Bei <a href="http://www.ubuntu.com/">Ubuntu</a> und <a href="http://www.de.debian.org/">Debian</a> ist in <a href="http://php.net/index.php">PHP</a> standardmässig die <a href="http://de.wikipedia.org/wiki/Garbage_Collection">Garbage Collection</a> deaktiviert. Diese sorgt dafür, das die Sessionfiles für abgelaufene Sessions automatisiert gelöscht werden. Bei Ubuntu und Debian löst ein Cronjob diesen Löschvorgang. </p>
<p>Ein Problem entsteht allerdings, wenn man eigene Verzeichnisse für die Sessionfiles definiert. Hier werden die Files dann nicht gelöscht und bleiben bestehen, was das Verzeichnis &#8211; je nach Traffic &#8211; schnell auf ein paar Tausende Dateien anwachsen lassen kann.</p>
<p>Um die Garbage Collection in PHP zu aktivieren, muss folgender Eintrag in der php.ini (für Apache unter /etc/php5/apache2/php.ini) geändert werden:</p>
<p>VORHER</p>
<p><code>;session.gc_probability = 0<br />
session.gc_divisor     = 100</code></p>
<p>NACHHER</p>
<p><code>session.gc_probability = 1<br />
session.gc_divisor     = 100</code></p>
<p>Diese Änderung bewirkt, das bei jedem hundertsten Start einer Session die Sessionfiles gelöscht werden.</p>
<p>Zusätzlich muss dann noch der Cronjob deaktiviert werden. Hierzu einfach /etc/cron.d/php5 mit dem Editor deiner Wahl bearbeiten und die letzte Zeile auskommentieren:</p>
<p><code># /etc/cron.d/php5: crontab fragment for php5<br />
#  This purges session files older than X, where X is defined in seconds<br />
#  as the largest value of session.gc_maxlifetime from all your php.ini<br />
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime<br />
<br />
# Look for and purge old sessions every 30 minutes<br />
#09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] &#038;&#038; [ -d /var/lib/php5 ] &#038;&#038; find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm<br />
</code></p>
<p>Was der Grund für diese Deaktivierung bei Ubuntu oder Debian war konnte ich auf die Schnelle nicht herausfinden, werde es aber in einem Update nachliefern. </p>
<p>Wenn in Linux-Distributionen solche Änderungen vorgenommen werden, sollte man aber passende Toolsets liefern, um alle Variationen abzufangen. So ist das nur eine halbe Sache, wenn ich nichts übersehen habe. Der Bug wurde auch schon <a href="https://bugs.launchpad.net/ubuntu/+source/php5/+bug/316441">im Ubuntu-Bugtracker aufgenommen</a>, aber noch keinem zugeordnet.</p>
<p>Weiterführende Links:</p>
<ul style="margin-bottom: 40px;">
<li><a href="http://de.php.net/manual/de/session.configuration.php#ini.session.gc-probability">PHP Dokumenation: session.gc-probability</a></li>
<li><a href="https://bugs.launchpad.net/ubuntu/+source/php5/+bug/316441">Bug bei Ubuntu</a></li>
</ul>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://stetix.de/php-session-garbage-collection-in-anderen-verzeichnissen-unter-ubuntu-und-debian.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSL / https in der robots.txt ausschließen</title>
		<link>http://stetix.de/ssl-https-der-robots-txt-ausschliessen.html</link>
		<comments>http://stetix.de/ssl-https-der-robots-txt-ausschliessen.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 08:11:01 +0000</pubDate>
		<dc:creator>Nico</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[robots.txt]]></category>

		<guid isPermaLink="false">http://stetix.de/?p=382</guid>
		<description><![CDATA[Über SSL indizierte Seiten können in Google und anderen Suchmaschinen Probleme mit doppelten Content, sowie unnötiges indizieren der Webseite und somit Resourcenverschwendung verursachen. Hier eine einfache Methode, den Zugriff von Suchmaschinen auf die eigene Webseite per SSL zu verhindern. Man nehme das Apache-Modul mod_rewrite und verweisst über eine RewriteRule einfach auf eine andere robots.txt Datei, [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Über SSL indizierte Seiten können in Google und anderen Suchmaschinen Probleme mit doppelten Content, sowie unnötiges indizieren der Webseite und somit Resourcenverschwendung verursachen. Hier eine einfache Methode, den Zugriff von Suchmaschinen auf die eigene Webseite per SSL zu verhindern. Man nehme das Apache-Modul mod_rewrite und verweisst über eine RewriteRule einfach auf eine andere robots.txt Datei, wenn diese per https angefordert wird. Einfach in der .htaccess-Datei folgendes hinzufügen oder neu anlegen, falls nicht vorhanden:</p>
<p><code>RewriteEngine on<br />
RewriteCond %{HTTPS} on<br />
RewriteRule ^robots\.txt$ robots_https.txt<br />
</code></p>
<p>Die Datei robots_https.txt sollte so aussehen, um alle Suchmaschinen-Bots (Googlebot etc.) und Seiten zu verbieten:</p>
<p><code>User-agent: *<br />
Disallow: /<br />
</code></p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://stetix.de/ssl-https-der-robots-txt-ausschliessen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>301 Weiterleitung einer Website per mod-rewrite</title>
		<link>http://stetix.de/301-weiterleitung-einer-website-per-mod-rewrite.html</link>
		<comments>http://stetix.de/301-weiterleitung-einer-website-per-mod-rewrite.html#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:12:49 +0000</pubDate>
		<dc:creator>Nico</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://stetix.de/?p=191</guid>
		<description><![CDATA[Wenn sich die Domain oder Url einer Website geändert hat, empfiehlt sich eine Weiterleitung auf die neue Adresse mit dem HTTP-Statuscode 301 (Moved Permanently). Der Code 301 deshalb, damit auch Suchmaschinen wie Google wissen, das sich die Adresse für immer geändert hat und nur die neue Url verwendet werden soll. Google berücksichtigt hier auch den [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Wenn sich die Domain oder Url einer Website geändert hat, empfiehlt sich eine Weiterleitung auf die neue Adresse mit dem <a href="http://de.wikipedia.org/wiki/HTTP-Statuscode">HTTP-Statuscode</a> 301 (Moved Permanently). Der Code 301 deshalb, damit auch Suchmaschinen wie <a href="http://www.google.de">Google</a> wissen, das sich die Adresse für immer geändert hat und nur die neue Url verwendet werden soll. Google berücksichtigt hier auch den Pagerank und ordnet diesen der neuen URL zu.</p>
<h3>Die Technik</h3>
<p>Technisch gesehen werden vom Webserver im HTTP 2 Zeilen an den Client (Nutzer mit Browser, Suchmaschine) gesendet. Eine mit dem Statscode und eine mit dem Ziel der Weiterleitung:</p>
<p><code>HTTP/1.1 301 Moved Permanently<br />
Location: http://www.neue-url.de/pfad/zur/datei.htm<br />
</code></p>
<p>Eine HTTP-Sitzung per Telnet auf Port 80 sieht dann zum Beispiel so aus:</p>
<p><code># telnet alte-domain.de 80<br />
Trying 12.34.56.78...<br />
Connected to alte-domain.de.<br />
Escape character is '^]'.<br />
GET / HTTP/1.1<br />
Host: alte-domain.de<br />
<br />
HTTP/1.1 301 Moved Permanently<br />
Date: Thu, 25 Feb 2009 20:06:55 GMT<br />
Server: Apache/2.2.11<br />
Location: http://neue-domain.de/<br />
Content-Length: 225<br />
Connection: close<br />
Content-Type: text/html; charset=iso-8859-1<br />
<br />
&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;<br />
&lt;html&gt;&lt;head&gt;<br />
&lt;title&gt;301 Moved Permanently&lt;/title&gt;<br />
&lt;/head&gt;&lt;body&gt;<br />
&lt;h1&gt;Moved Permanently&lt;/h1&gt;<br />
&lt;p&gt;The document has moved &lt;a href="http://neue-domain.de/"&gt;here&lt;/a&gt;.&lt;/p&gt;<br />
&lt;/body&gt;&lt;/html&gt;<br />
Connection closed by foreign host.<br />
</code></p>
<h3>mod_rewrite &#8211; die Lösung</h3>
<p>Um dies mit Hilfe des Webservers Apache zu lösen, hilft uns das Modul Rewrite, kurz <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a>. Hat man Zugriff auf die Konfigurationsdatei des Webservers, kann man die Rewrite-Weiterleitung im <a href="http://httpd.apache.org/docs/2.2/mod/core.html#virtualhost">VirtualHost</a>, in der <a href="http://httpd.apache.org/docs/2.2/mod/core.html#directory">Directory</a>- oder <a href="http://httpd.apache.org/docs/2.2/mod/core.html#location">Location</a>-Direktive vornehmen. Anonsten erstellt man eine <a href="http://httpd.apache.org/docs/2.2/howto/htaccess.html">.htaccess</a>-Datei und nimmt die Konfiguration hier vor.<br />
Um mod_rewrite zu aktivieren, benötigen wir folgende zwei Zeilen:</p>
<p><code>RewriteEngine on<br />
RewriteBase /<br />
</code><br />
<span id="more-191"></span>Die erste Zeile aktiviert das Modul und die zweite setzt den Basis-Pfad, für den die folgende Rewrite-Konfiguration dienen soll. Möchten wir beispielsweise nur für das Verzeichnis <em>/homepage/blog/</em> eine Weiterleitung erstellen, benötigen wir folgende Einstellung:</p>
<p><code>RewriteEngine on<br />
RewriteBase /homepage/blog/<br />
</code></p>
<p>Als nächstes definieren wir unsere Regel für die Weiterleitung. Diese beinhaltet das Suchmuster und den Ersatz, d.h. die Original-Url und die neue Adresse der URL-Weiterleitung. Das tolle ist, das hier <a href="http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck">Reguläre Ausdrücke</a> verwendet werden können. Die Syntax ist wie folgt:</p>
<p><code>RewriteRule &lt;suchmuster&gt; &lt;ersatz&gt;<br />
</code></p>
<p>Eine Domain-Weiterleitung mit mod_rewrite würde zum Beispiel so aussehen:</p>
<p><code>RewriteRule ^(.*)$ http://www.neuedomain.de/$1 [R=301,L]<br />
</code></p>
<p>Eine Weiterleitung eines Verzeichnisses so:</p>
<p><code>RewriteRule ^homepage/blog(.*)$ http://www.neuedomain.de/homepage/blog$1 [R=301,L]<br />
</code></p>
<p>Das mit dem Modul Rewrite noch mehr Möglichkeiten z.B. dynamischer Weiterleitungen bestehen, verdeutlicht folgendes Beispiel:</p>
<p><code>RewriteRule ^([a-z\-]+)/([a-z\-]+)/(.*)$ http://www.neuedomain.de/$3?site=$1&amp;sub=$2 [R=301,L]<br />
</code></p>
<p>Jede Regel ist aber vorher gut zu durchdenken, da bei Fehlkonfiguration die Performance des Apache in Mitleidenschaft gezogen oder sogar zum Absturz, z.B. durch Endlosschleifen, gebracht werden kann. Mehr Informationen und viele Möglichkeiten mehr gibt es in der <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule">mod_rewrite Apache-Doku</a>.</p>
<h3>Andere Möglichkeiten einer Weiterleitung</h3>
<p>Ist mod_rewrite nicht installiert, oder keine Berechtigung zur Benutzung gegeben, müssen andere Lösungen her.</p>
<h4>Weiterleitung mit PHP</h4>
<p>Mit PHP könnte man oben beschriebene Weiterleitungen mit Hilfe der <a href="http://de.php.net/manual/de/function.header.php">header</a>-Funktion lösen.</p>
<pre name="code" class="php">&lt;?php
header('HTTP/1.1 301 Moved Permanently', true);
header('Location: http://www.neue-url.de/pfad/zur/datei.htm', true);
?&gt;</pre>
<h4>Weiterleitung mit Perl / CGI</h4>
<p>Auch mit Perl könnte man die Weiterleitung mit Hilfe eines Headers direkt per print lösen:</p>
<pre name="code" class="ruby">#!/usr/bin/perl

print "HTTP/1.1 301 Moved Permanently\n";
print "Location: http://www.neue-url.de/pfad/zur/datei.htm\n";</pre>
<h4>Weiterleitung mit Ruby</h4>
<p>In Ruby kann man dies zum Beispiel so realisieren:</p>
<pre name="code" class="ruby">#!/usr/bin/env ruby

require 'cgi'
cgi.header({'HTTP/1.1 301 Moved Permanently','Location'=&gt;'http://www.neue-url.de/pfad/zur/datei.htm'})</pre>
<h4>Clientseitig ohne 301-Status: Javascript</h4>
<p>Eine clientseitige Weiterleitung könnte mit Javascript realisiert werden. Nachteil ist hier, das bei deaktiviertem Javascript die Weiterleitung nicht funktioniert.</p>
<pre name="code" class="javascript">&lt;script type="text/javascript"&gt;
&lt;!--
window.location.replace("http://www.neue-url.de/pfad/zur/datei.htm");
// --&gt;
&lt;/script&gt;</pre>
<h4>Clientseitig ohne 301-Status: Weiterleitung per Meta-Tag</h4>
<p>Hierfür wird im Head Bereich des HTML-Codes ein Meta-Tag eingefügt, der durch Semikolon getrennt die Zeit angibt, die der Browser bis zur Weiterleitung warten soll und die URL des Ziels der Weiterleitung. Auch diese methode empfehle ich nicht, da dies wie auch Javascript Interpretationssache des Browsers ist, diesen tag zu beachten (Wobei alle Standard-Browser dies tun).</p>
<pre name="code" class="html">&lt;head&gt;
&lt;meta http-equiv="refresh" content="3; url=http://www.neue-url.de/pfad/zur/datei.htm"&gt;
&lt;!-- andere Tags im Header --&gt;
&lt;/head&gt;</pre>
<p>Meine Empfehlung: Immer mod-rewrite nutzen, da serverseitig, gut konfigurierbar und vielseitig einsetzbar. Sollte dies nicht vorhanden oder möglich sein, können die anderen genannten Möglichkeiten einer Weiterleitung (PHP oder andere serverseitige Script- bzw. Programmiersprache, Javascript, Meta-Tag &#8211; in der Reihenfolge) weiterhelfen.</p>
<p>Happy Redirecting!</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://stetix.de/301-weiterleitung-einer-website-per-mod-rewrite.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching 3/26 queries in 0.014 seconds using apc
Object Caching 1101/1121 objects using apc

Served from: stetix.de @ 2012-05-21 23:57:33 -->
