<?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>JCG | JCG</title>
	<atom:link href="http://www.jcg.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jcg.de</link>
	<description>Jan-Christoph Gack</description>
	<lastBuildDate>Tue, 15 May 2012 00:46:00 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>301-Redirect mit Nginx</title>
		<link>http://www.jcg.de/301-redirect-mit-nginx/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=301-redirect-mit-nginx</link>
		<comments>http://www.jcg.de/301-redirect-mit-nginx/#comments</comments>
		<pubDate>Wed, 02 May 2012 23:50:14 +0000</pubDate>
		<dc:creator>JCG</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.jcg.de/?p=150</guid>
		<description><![CDATA[Um Duplicate Content zu vermeiden, soll host.net sauber, d.h. mittels 301-Redirect (Permanent Redirect), auf www.host.net weiterleiten (oder umgekehrt). In die&#8230;]]></description>
				<content:encoded><![CDATA[<p>Um Duplicate Content zu vermeiden, soll host.net sauber, d.h. mittels 301-Redirect (Permanent Redirect), auf www.host.net weiterleiten (oder umgekehrt).</p>
<p>In die Nginx-Konfiguration muss hierzu Folgendes aufgenommen werden:</p>
<p>if ($host = &#8216;host.net&#8217; ) {<br />
rewrite  ^/(.*)$  http://www.host.net/$1  permanent;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jcg.de/301-redirect-mit-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update von Ubuntu 10.04 LTS auf 12.04 LTS (Server)</title>
		<link>http://www.jcg.de/update-von-ubuntu-10-04-lts-auf-12-04-lts-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=update-von-ubuntu-10-04-lts-auf-12-04-lts-server</link>
		<comments>http://www.jcg.de/update-von-ubuntu-10-04-lts-auf-12-04-lts-server/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 00:40:59 +0000</pubDate>
		<dc:creator>JCG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.jcg.de/?p=144</guid>
		<description><![CDATA[Vorgestern erschien pünktlich die finale Version 12.04 LTS von Ubuntu. Ein direktes Update von 10.04 LTS auf 12.04 LTS ist&#8230;]]></description>
				<content:encoded><![CDATA[<p>Vorgestern erschien pünktlich die finale Version 12.04 LTS von Ubuntu. Ein direktes Update von 10.04 LTS auf 12.04 LTS ist allerdings (noch) nicht vorgesehen: Die Update Policy der LTS-Versionen verlangt erst ein Erscheinen des ersten Point Releases von 12.04, also 12.04.1.</p>
<p>So aktualisiert man von der letzten LTS-Version 10.04 auf die aktuelle 12.04 LTS, und zwar über die &#8220;Umwege&#8221; 10.10, 11.04 und 11.10:</p>
<p>Zunächst ist zu prüfen, ob die aktuelle Version des Update-Mangers installiert ist:</p>
<pre>sudo apt-get install update-manager-core</pre>
<p>Nun wird die Datei <strong>/etc/update-manager/release-upgrades </strong>editiert:</p>
<pre>Prompt=normal</pre>
<p>Mit dem Befehl</p>
<pre>sudo do-release-upgrade</pre>
<p>wird das Update gestartet.</p>
<p>Dies wiederholt man so oft, bis man bei der aktuellen Version 12.04 LTS angelangt ist. Danach setzt man den Update-Pfad auf</p>
<p>Prompt=lts</p>
<p>zurück.</p>
<p>Aufgrund der sehr umfangreichen Änderungen von 10.04 zu 12.04 sollte allerdings genau abgewogen werden, ob man ein Update durchführt. Ich selbst update derzeit nach o.g. Muster nur &#8220;weniger wichtige&#8221; Systeme und belasse wichtige Produktivsysteme vorerst bei 10.04 LTS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jcg.de/update-von-ubuntu-10-04-lts-auf-12-04-lts-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>apt-get oder aptitude?</title>
		<link>http://www.jcg.de/apt-get-oder-aptitude/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apt-get-oder-aptitude</link>
		<comments>http://www.jcg.de/apt-get-oder-aptitude/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 00:17:21 +0000</pubDate>
		<dc:creator>JCG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[betriebssysteme]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.jcg.de/?p=135</guid>
		<description><![CDATA[Bei auf dpkg-Paketverwaltung basierenden Linux-Distributionen wie Debian oder Ubuntu steht zur komfortablen Verwaltung der installierten, der zu installierenden und der&#8230;]]></description>
				<content:encoded><![CDATA[<p>Bei auf dpkg-Paketverwaltung basierenden Linux-Distributionen wie Debian oder Ubuntu steht zur komfortablen Verwaltung der installierten, der zu installierenden und der zu entfernenden Software sowie zur Aktualisierung der Paketquellen APT zur Verfügung, das Advanced Packaging Tool.</p>
<p>Zusätzlich existiert aptitude als Frontend für APT. Zudem existiert, jedoch nur noch aus Gründen der Abwärtskompatibilität, dselect.</p>
<p>Bereits seit Debian 3.1 (&#8220;Sarge&#8221;) wird offiziell aptitude zur Paketverwaltung empfohlen. Kurz gesagt kann aptitude alles, was apt-get kann, und darüber hinaus noch einiges mehr. Dank ncurses-Bibliothek ist aptitude in der Lage, eine grafische (zeichenorientierte) Oberfläche zu bieten. Um diese soll es hier jedoch nicht gehen.</p>
<p>Was Funktionalität und Syntax auf der Kommandozeile angeht, sind apt-get und aptitude im Wesentlichen identisch. Wichtig ist, dass man bei einem System entweder mit den Befehlen apt-get/apt-cache <strong>oder</strong> mit aptitude arbeitet. Denn beide Frontends verwalten Informationen über installierte Pakete und über Abhängigkeiten in jeweils eigenen Datenbanken.</p>
<p>Mischt man APT mit aptitude, kann es passieren, dass &#8220;die linke Hand nicht weiss, was die rechte tut&#8221;: Früher oder später kommt es zu Problemen durch die Verwendung von mehr als einem Ort, in dem Paketinformationen (und hier insbesondere Abhängigkeiten) gespeichert werden.</p>
<p>Der Einsatz von aptitude empfiehlt sich aus folgendem Grund:</p>
<p>aptitude führt ein gegenüber apt-get erweitertes Log über installierte Pakete. So speichert aptitude beispielsweise stets, ob ein Paket von einem Benutzer installiert wurde oder vom System selbst aufgrund einer Abhängigkeit. Wurde ein Paket automatisch wegen einer Abhängigkeit installiert, so entfernt es aptitude ebenso automatisch wieder, sobald das übergeordnete Paket deinstalliert wird (und keine weiteren Abhängigkeiten einer Entfernung entgegenstehen).</p>
<p>Verwaiste (nicht mehr benötigte) Pakete kann aptitude somit zuverlässig erkennen und deinstallieren. aptitude erleichtert das Sauberhalten des Systems dadurch ganz erheblich.</p>
<p>Die wichtigsten Befehle sind:</p>
<p><strong>aptitude update</strong> lädt aktualisierte Paketquellen herunter. Dies sollte stets erfolgen, bevor weitere Befehle ausgeführt werden.</p>
<p><strong>aptitude upgrade</strong> lädt Paketauktualisierungen herunter und wendet diese nach Rückfrage und expliziter Bestätigung an.</p>
<p><strong>aptitude dist-upgrade</strong> gestattet das Aktualisieren der gesamten Distribution auf eine neue Version der Distribution.</p>
<p><strong>aptitude install (Paketname)</strong> installiert ein bestimmtes Paket.</p>
<p><strong>aptitude remove (Paketname)</strong> deinstalliert ein bestimmtes Paket. Eventuell vorhandene Konfigurationsdateien bleiben erhalten.</p>
<p><strong>aptitude purge (Paketname)</strong> deinstalliert ein bestimmtes Paket und entfernt im selben Zuge auch eventuell vorhandene Konfigurationsdateien.</p>
<p><strong>aptitude search (Suchbegriff)</strong> sucht im Repository nach Paketen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jcg.de/apt-get-oder-aptitude/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento: /var/cache als Ramdisk mounten</title>
		<link>http://www.jcg.de/magento-var-cache-tmpfs-mounte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=magento-var-cache-tmpfs-mounte</link>
		<comments>http://www.jcg.de/magento-var-cache-tmpfs-mounte/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 21:39:13 +0000</pubDate>
		<dc:creator>JCG</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[optimierung]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[shop]]></category>

		<guid isPermaLink="false">http://www.jcg.de/?p=77</guid>
		<description><![CDATA[Bekanntlich kann auf kein Speichermedium annähernd so schnell zugegriffen werden wie auf den Arbeitsspeicher, das RAM. Ausreichend verfügbares RAM vorausgesetzt,&#8230;]]></description>
				<content:encoded><![CDATA[<p>Bekanntlich kann auf kein Speichermedium annähernd so schnell zugegriffen werden wie auf den Arbeitsspeicher, das RAM. Ausreichend verfügbares RAM vorausgesetzt, ist Magentos /var/cache (oder nach Belieben auch das gesamte Verzeichnis /var ) geradezu prädestiniert dafür, in eben diesem gespeichert zu sein.</p>
<p>Genaugenommen kommt statt einer Ramdisk das zeitgemäßere tmpfs (Temporary File System) zum Einsatz. Ein entscheidender Vorteil einer tmpfs-Partition ist, dass die Größe des RAM, die sie belegt, variabel ist: Eine tmpfs-Partition belegt physisch immer nur so viel Arbeitsspeicher, wie sie aufgrund ihrer aktuellen Größe gerade braucht. Sie wächst quasi mit, bis zum Wert, der als erlaubtes Maximum definiert wurde.</p>
<p>Die im Web an vielen Stellen zu findende Syntax funktioniert übrigens <strong>nicht</strong>, da mit dieser das Device von Magento nicht beschreibbar ist. Man muss es explizit User und Gruppe www-data zuweisen (das bezieht sich auf Debian/GNU, Ubuntu Server und deren Derivate; bei anderen Distributionen entsprechend dem User und der Gruppe, unter welchem bzw. welcher der Webserver läuft). Und zwar so:</p>
<blockquote><p>mount -t tmpfs -o size=1G,mode=0744,uid=www-data,gid=www-data tmpfs <em>/var/www/ihr-host/var/cache/</em></p></blockquote>
<p>In o.g. Beispiel wird der tmpfs-Partition eine maximale Größe von einem Gbyte zugewiesen. Erlaubt sind natürlich auch Werte im Mbyte-Bereich, z.B. 512M oder 800M etc.</p>
<p>Zu bedenken ist, dass Partition und ergo deren Inhalt nach einem Neustart weg sind. Soll die Partition nach einem Neustart automatisch gemountet werden, erreicht man dies durch einen Eintrag in /etc/fstab .</p>
<p>Manuell kann man die Partition bei Bedarf mit</p>
<blockquote><p>umount tmpfs</p></blockquote>
<p>unmounten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jcg.de/magento-var-cache-tmpfs-mounte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Host-Splitting für Magento</title>
		<link>http://www.jcg.de/host-splitting-fur-magento/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=host-splitting-fur-magento</link>
		<comments>http://www.jcg.de/host-splitting-fur-magento/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 16:06:45 +0000</pubDate>
		<dc:creator>JCG</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[optimierung]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[shop]]></category>

		<guid isPermaLink="false">http://www.jcg.de/?p=56</guid>
		<description><![CDATA[Zahlreiche Browser limitieren die Anzahl gleichzeitiger Requests pro Host auf zehn. Gerade bei komplexen CMS oder Shopsystemen, deren Seitenaufrufe eine&#8230;]]></description>
				<content:encoded><![CDATA[<p>Zahlreiche Browser limitieren die Anzahl gleichzeitiger Requests pro Host auf zehn. Gerade bei komplexen CMS oder Shopsystemen, deren Seitenaufrufe eine große Anzahl paralleler Requests auslösen, bedeutet diese Beschränkung einen clientseitigen Flaschenhals.</p>
<p>Diesen beseitigen wir, indem wir die Requests auf verschiedene Hosts verteilen. Im Magento-Backend findet sich hierfür unter &#8220;Konfiguration&#8221; -&gt; &#8220;System&#8221; -&gt; &#8220;Web&#8221; -&gt; &#8220;Ungesichert&#8221; eine entsprechende Konfigurationsmöglichkeit:</p>
<p>&nbsp;</p>
<p><a href="http://www.jcg.de/wp-content/uploads/2011/12/magento-hosts-01.png"><img class="aligncenter size-full wp-image-57" title="magento-hosts-01" src="http://www.jcg.de/wp-content/uploads/2011/12/magento-hosts-01.png" alt="Magento-Konfiguration der Hosts" width="613" height="203" /></a></p>
<p>Hier tragen wir nun jeweils vom Basis-Host abweichende Hosts ein:</p>
<p>&nbsp;</p>
<p><a href="http://www.jcg.de/wp-content/uploads/2011/12/magento-hosts-02.png"><img class="aligncenter size-full wp-image-63" title="magento-hosts-02" src="http://www.jcg.de/wp-content/uploads/2011/12/magento-hosts-02.png" alt="alternative Hosts für Magento" width="642" height="202" /></a></p>
<p>&nbsp;</p>
<p>Zuvor müssen die entsprechenden Hosts natürlich existieren und konfiguriert werden. Am Beispiel von js.host.tld sieht die entsprechende Apache-Konfigurationsdatei so aus:</p>
<blockquote><p>&lt;VirtualHost *:80&gt;<br />
ServerAdmin webmaster@host.tld</p>
<p>ServerName js.host.tld<br />
DocumentRoot /var/www/host<br />
&lt;Directory /var/www/host/&gt;<br />
Options -Indexes FollowSymLinks MultiViews<br />
AllowOverride None<br />
Order deny,allow<br />
deny from all<br />
&lt;/Directory&gt;<br />
&lt;Directory /var/www/host/js/&gt;<br />
Options -Indexes FollowSymLinks MultiViews<br />
AllowOverride None<br />
Order allow,deny<br />
allow from all<br />
Include /etc/apache2/deflate-expires.conf<br />
&lt;/Directory&gt;</p>
<p>ErrorLog /var/log/apache2/js.host_error.log<br />
LogLevel warn<br />
CustomLog /var/log/apache2/js.host_access.log combined<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>Erläuterungen hierzu:</p>
<p>Der erste Directory-Container definiert das Verhalten des Magento-Rootverzeichnisses. Auf selbiges zeigen nämlich auch die zusätzlichen Hosts. Hier sollte zwecks Vermeidung von Duplicate Content unterbunden werden, dass das Magento-Rootverzeichnis über weitere Hosts erreichbar ist:</p>
<blockquote><p>Order deny,allow<br />
deny from all</p></blockquote>
<p>Der zweite Directory-Container dagegen erlaubt den Zugriff für das jeweils benötigte Verzeichnis (in diesem Beispiel /js):</p>
<blockquote><p>Order allow,deny<br />
allow from all</p></blockquote>
<p>Mit dem nachfolgenden Include-Befehl wird eine .conf-Datei inkludiert, welche die Inhalte aufweist, die eigentlich in der .htaccess-Datei des jeweiligen Verzeichnisses untergebracht sind. Ich habe diese &#8220;deflate-expires.conf&#8221; benannt, da im Wesentlichen Kompressions- und Expires-Anweisungen darin enthalten sind (und ich dieselbe Datei auch in weitere Hostfiles inkludiere, eine möglichst allgemeine, beschreibende und host-unabhängige Bezeichnung ergo angebracht ist).</p>
<p>Ich selbst arbeite nach Möglichkeit nicht mit .htaccess-Dateien (Direktive &#8220;AllowOverride None&#8221;). Sofern .htaccess-Dateien Berücksichtigung finden sollen, kann das Inkludieren von Anweisungen entfallen (Direktive &#8220;AllowOverride All&#8221;).</p>
<p>Analog dazu wird für die weiteren gewünschten Hosts verfahren (media.host.tld, skin.host.tld,&#8230;). Bei Bedarf kann für SSL-Requests ebenso verfahren werden, allerdings wird dann für jeden Host ein separates SSL-Zertifikat benötigt (oder alternativ ein Wildcard-Zertifikat, das Subdomains einschließt).</p>
<h2>Fazit:</h2>
<p>Durch das Verteilen der Requests auf weitere Hosts erreicht man im Handumdrehen eine Verfielfachung der clientseitigen Begrenzung simultan möglicher Requests. Mit Einrichtung und Inbetriebnahme der Hosts js, media und skin können theoretisch statt zehn vierzig Requests parallel durchgeführt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jcg.de/host-splitting-fur-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 409/411 objects using disk: basic

 Served from: www.jcg.de @ 2013-05-19 12:03:21 by W3 Total Cache -->