Contao 3 & 4 unter MAMP PRO (NGINX)

Contao 4 und MAMP PRO (NGINX)

MAMP bietet seit einigen Versionen auch NGINX als Webserver. Von der Konfiguration muss man aber ein paar Details beachten. Für Contao 4 kommen hier ein paar Routes hinzu. Im Tab Nginx, der bei den Hosts zu finden ist, muss unter „Custom*:“ folgender Block eingetragen werden, damit das Debugging von Symfony und der Contao-Manager funktioniert.

location / {
    try_files $uri /app.php$is_args$args;
}
location ~ /app_dev.php/ {
    try_files $uri /app_dev.php$is_args$args;
}
location ~ /contao-manager.phar.php/ {
  try_files $uri /contao-manager.phar.php$is_args$args;
}

Contao 4 ohne .html Suffix in der URL

Contao hängt standardmäßig .html an das Ende der URLs im Frontend. Wenn man jetzt jedoch etwas „kompaktere“ URLs haben will, kann dies natürlich geändert werden. In Contao 3 konnte dies über die Systemeinstellungen sowie einer kleinen Änderung in der .htaccess vorgenommen werden. Das geht in Contao 4 nur noch über die config.yml. Wir erstellen einfach die Datei app/config/config.yml (ich meine nicht die parameters.yml). Am Ende liegen hier zwei Dateien in app/config/. Dann folgendes einfügen und den Cache in var/cache/ löschen. Den Cache kann man auch leicht über den Contao Manager löschen oder einfach kurz per SSH cd var/cache && rm -rf dev prod oder noch kürzer mit rm -rf var/cache. Das Löschen per FTP dauert halt ewig ;-).

# Contao configuration
contao:
    url_suffix: '/'

Contao 3 und WordPress mit MAMP (NGINX)

Für Contao 3.x und WordPress reicht folgende Zeile im Feld „try_files:“

$uri $uri/ /index.php?$args

Bitte darauf achten, dass kein Semikolon am Ende steht. Wenn man es aus einer normalen Configdatei kopiert, steht dort normal ein ; am Ende und der Server lässt sich nicht starten. Das Gleiche gilt auch für „try_files“ selbst. Das Schöne dabei ist, dass man keine weiteren Rewrites vornehmen muss, wenn man Contao ohne .html Suffix betreiben will. Beim Apachen muss man hier noch eine kleine Änderung in der .htaccess vornehmen.

php.ini für lokale Entwicklung

Falls euer MAMP zum ersten mal installiert wurde, bietet es sich noch an, folgende Development-Settings in der php.ini zu hinterlegen (Vorlagen -> Vorlage editieren -> PHP (php.ini) -> 7.x.x, je nach dem welche Version ihr eben aktiv habt. Das ist nur zum entwickeln lokal gedacht. Aus performancegründen dürfen diese Settings niemals auf Produktivsystemen gesetzt werden. Somit lassen sich z.B. große Datenbanken lokal ohne weiteres importieren oder größere Skripte für Importe ausführen.

post_max_size = 512M
upload_max_filesize = 512M
max_execution_time = 560
max_input_time = -1
memory_limit = 512M

Jetzt sollte Contao lokal richtig schnell laufen. Wichtig: APC und OPcache deaktivieren, sonst fängt die Sucherei an, warum die Codeänderungen nicht erscheinen. Das Caching ist wirklich nur hilfreich wenn man nur im Backend arbeitet und nicht an den Dateien. Der Vergleich ist auch nur etwa 100-150ms was ich so im Chrome gesehen habe. Bei mir lädt somit das Backend mit etwa 500-600ms, da machts dann auch Spass. (Vergleich Apache: 600-700ms).

Der Vollständigkeit halber muss man auch sagen das sich NGINX und ein gut konfigurierter Apache wenig nehmen. Das schöne bei NGINX ist halt die einfache Config aus meiner Sicht. uWSGI lässt sich damit auch relativ leicht auch für Python-Webapps konfigurieren. Sobald es dann auch um Scale geht, ist das ebenfalls relativ easy mit NGINX realisierbar.

Wenn der Manager mal zickt

Falls die Meldung ERROR 500 An empty string is not a valid JSON value beim Aufruf des Contao Managers kommt, einfach mal den Inhalt des Verzeichnises contao-manager bis auf die users.json löschen. Dann sollte der Manager auch wieder gehen. Beim Login werden alle Files wieder neu erstellt. Beim Aufruf des Managers auf Manager konfigurieren klicken, Contao wird dabei nicht neu installiert und es sollte alles wieder gehen wie gehabt. Getestet mit der Version 1.0.0-beta10. Ich hatte das Problem nach dem ich das Setup auf ein Stagingsystem (df.eu und hostingwerk) hochgeladen habe und im Anschluss bequem den dev und prod Cache löschen wollte.

  • Stefan Schleich

    Vielen Dank für die Tipps. Zwei Erkenntnisse waren wichtig:

    1. Man braucht MAMP Pro.

    2. Es ist MAMP Pro völlig egal, was man im Nginx-Tab angibt, so lange man localhost nutzt. Denn dort kann man im Bereich „Allgemein/General“ die Auswahl „Benutzen mit/Use with“ nicht verändern.

    Note: You cannot make changes to the Nginx settings unless the host is set to Nginx on the Settings > Hosts > General tab.

    Mit 49€ weniger in der Tasche, neuem Host und der Auswahl „Benutzen mit/Use with ‚Nginx'“ läuft nun alles wie geschmiert.

    • Rolf Schupfinger

      Stimmt, es handelt sich um MAMP Pro. Ich werde es ergänzen 🙂