Contao-News

Wir informieren Dich hier regelmäßig zu Updates, stellen Best-Practice-Arbeiten vor und berichten über Aktuelles aus dem Contaoversum.

Contao und Nginx

von

Contao unter Nginx zu betreiben, ist aktuell noch eine kleine Herausforderung. Dieser Artikel erklärt die Problematik und zeigt Lösungsansätze auf.

Warum überhaupt Nginx?

Nginx ist ein modular aufgebauter und sehr leistungsfähiger Webserver, der laut Wikipedia auf 22,4% der Top 10.000 Websites verwendet wird. Durch einen konsequenten Fokus auf Performance, kann Nginx viele Sachen schneller erledigen als z.B. der Apache-Webserver. In einem Web, in dem sich die Geschwindigkeit der Seitenauslieferung positiv auf das Suchmaschinen-Ranking auswirkt, lässt sich gut nachvollziehen, wieso sich Nginx einer immer größeren Beliebtheit erfreut.

Wo genau liegt die Problematik?

Nginx und Apache unterscheiden sich (unter anderem) in einem wichtigen Punkt: Die Apache-Konfiguration lässt sich durch .htaccess-Dateien in jedem beliebigen Unterordner anpassen. Bei Nginx gibt es keine solche Möglichkeit – und das aus gutem Grund. Ist die Verwendung von .htaccess-Dateien aktiviert, muss der Apache-Server im aktuellen Ordner und in allen übergeordneten Ordnern nach solchen suchen und die gefundenen Einstellungen sinnvoll zusammenführen. Das geht spürbar zur Lasten der Performance.

Nginx verzichtet deswegen ganz bewusst auf eine entsprechende Option.

Contao und Apache

Als Contao im Jahre 2004 entwickelt wurde, steckte die Entwicklung von Nginx gerade in den Kinderschuhen. Es gab quasi keine Alternative zu Apache, weshalb wir auch kein Problem darin sahen, Apache-spezifische Features (nämlich die besagten .htaccess-Dateien) zu verwenden, um z.B. Ordner vor dem Zugriff über HTTP zu schützen. Leider haben wir uns dadurch auch ein großes Stück weit von Apache abhängig gemacht, was nun die Umstellung auf z.B. Nginx erschwert.

Die einfache Lösung

Die einfachste Lösung für das Problem ist, einen Unterordner der Applikation als Document-Root, also als oberste Ebene, die über HTTP erreicht werden kann, zu definieren. Alle Ressourcen, die öffentlich erreichbar sein sollen, müssen in diesen Unterordner kopiert oder dort mittels Symlinks verfügbar gemacht werden. Alle anderen Ordner, die unterhalb oder auf derselben Ebene wie das Document-Root liegen, sind automatisch vor dem Zugriff über HTTP geschützt.

In Contao 4 werden wir diesen Weg gehen. Alle öffentlichen Dateien werden im Unterordner /web verfügbar gemacht, so dass keine .htaccess-Dateien mehr verwendet werden müssen. Auf diese Weise wird Contao unabhängig vom verwendeten Webserver und lässt sich unter Nginx genauso einfach installieren wie unter Apache. Im Gegenzug steigen jedoch die Anforderungen an das Webhosting, denn nun muss der Server Symlinks unterstützen.

Lösung für Contao 3

Für Contao 3 gibt es leider keine einfache Lösung. Selbstverständlich lässt sich Contao unter Nginx betreiben, jedoch müssen alle Verzeichnisse, die mittels .htaccess-Datei geschützt werden sollen, explizit in der statischen Nginx-Konfiguration hinterlegt werden. Dies hat jedoch unter anderem den Nachteil, dass sich Ordner in der Contao-Dateiverwaltung nicht mehr per Klick schützen lassen. Zudem muss bei jeder Erweiterung, die über das Extension-Repository installiert wird, separat geprüft werden, ob und welche Einstellungen gegebenenfalls mittels .htaccess-Dateien gesetzt werden. Anschließend müssen die Einstellungen manuell in der Nginx-Konfiguration nachgepflegt werden.

Die Hybrid-Lösung

Bei der Hybrid-Lösung sind sowohl Nginx als auch Apache als Webserver installiert. Der Nginx-Server nimmt alle Anfragen entgegen, beantwortet selbst aber nur einen Teil davon und leitet den Rest an den lokalen Apache-Webserver weiter. Der lokale Apache-Server wertet die .htaccess-Dateien weiterhin aus, erhält aber insgesamt deutlich weniger Anfragen und braucht daher auch weniger Ressourcen.

Eine entsprechende Hybrid-Lösung haben wir beim Contao-Webhosting im Einsatz. Der Kunde hat die Auswahl aus verschiedenen Nginx-Profilen für z.B. Contao 2 oder Contao 3, anhand derer der Nginx-Server festlegt, welche Anfragen er direkt beantworten kann und welche er an den Apache-Webserver weiterleiten muss, damit dieser eventuell vorhandene .htaccess-Dateien auswerten kann.

Im Falle von Contao 3 werden beispielsweise alle Dateien aus dem Ordner assets/ direkt über Nginx ausgeliefert, während alle Dateien aus dem Ordner files/ an den Apache weitergeleitet werden. Auf diese Weise profitiert die Webseite zumindest teilweise von der besseren Performance des Nginx-Webservers, was sich messbar auf die Auslieferungsgeschwindigkeit auswirkt.

Wer die Hybrid-Lösung gerne selbst testen möchte, kann sich einfach auf inetrobots.de registrieren; es gibt eine 30-Tage-Geld-zurück-Garantie. Wir haben übrigens auch schon ein Profil für Contao 4, das dann ganz ohne Apache auskommt :)

Fazit

Nginx und Contao 3 impliziert immer einen Kompromiss. Wer auf dynamischen Zugriffsschutz verzichten kann und alle .htaccess-Einstellungen manuell in die Nginx-Konfiguration übernimmt, kann schon heute Contao ausschließlich mit Nginx ausliefern. Wer sich hingegen nicht mit der Konfiguration auseinandersetzen möchte, der kann eine Hybrid-Lösung wie das Contao-Webhosting verwenden, allerdings mit der kleinen Einschränkung, dass nicht alle Anfragen direkt vom Nginx-Server beantwortet werden können.

Alle anderen müssen wohl erstmal beim Apache bleiben; allerdings ist die Zeit bis zum Release von Contao 4 im Mai 2015 ja nicht mehr so lang.

Zurück zur News-Übersicht.

Kommentare

Kommentar von a-v-l |

Als kleines Update könnte man dem Artikel noch hinzufügen, dass es nun mit Contao 4 kein Problem mehr darstellt, Contao unter Nginx zu betreiben.

Kommentar von iCodr8 |

Gibt es inzwischen eine Nginx Beispielkonfiguration für Contao 4?

Einen Kommentar schreiben

Bitte rechnen Sie 5 plus 9.