nginx-Konfiguration: Owncloud 9.0 im Unterordner des Webroot betreiben

Update 17.06.2016: Mittlerweile ist eine offizielle Konfiguration für das Betreiben von Owncloud mit nginx in einem Unterordner verfügbar. In diese sind auch einige Verbesserungen eingeflossen (die in der Apache-Konfiguration schon länger enthalten waren), so dass ich empfehle diese Konfiguration anstatt meiner zu benutzen:
https://doc.owncloud.org/server/9.0/admin_manual/installation/nginx_owncloud_9x.html#owncloud-in-a-subdir-of-nginx

Es folgt der ursprüngliche Beitrag, der zu einem Zeitpunkt geschrieben wurde, als es die oben genannte offizielle Konfiguration noch nicht gab.


Vor ein paar Tagen erschien Owncloud 9.0, in dessen Dokumentation eine geänderte nginx-Konfiguration enthalten ist. Höchste Zeit also für eine Aktualisierung des Artikels wie man Owncloud in einem Unterordner des Webroot betreibt. Der alte Beitrag für Owncloud 8.2 dient als Grundlage, die dann in einem weiteren Schritt für Owncloud 9.0 aktualisiert wird.

1. Grundlage

Zunächst befolgt man die Schritte 1-3 der Anleitung für Owncloud 8.2:
nginx-Konfiguration: Owncloud im Unterordner des Webroot betreiben

2. Änderungen von Owncloud 8.2 auf Owncloud 9.0

Die offiziellen nginx-Konfigurationen von der Owncloud-Webseite:
Version 9.0: https://doc.owncloud.org/server/9.0/admin_manual/installation/nginx_configuration.html
Version 8.2: https://doc.owncloud.org/server/8.2/admin_manual/installation/nginx_configuration.html

Bei genauerem Hinsehen stellt man fest, dass sich diese Konfigurationen nur in 2 Punkten unterscheiden. Diese Unterschiede sind in die im ersten Schritt erstellte Konfiguration schnell eingepflegt:

  • es gibt in Version 9.0 zwei weitere add_header Direktiven. Diese sind:
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    Diese beiden Direktiven müssen der Konfiguration zweimal direkt unter der Zeile
    add_header X-Robots-Tag none;
    hinzugefügt werden.
  • die Behandlung von dav-Anfragen (caldav, carddav, webdav) ist mit Version 9.0 direkt in den Kern von Owncloud gewandert. Daher müssen die .well-known-Weiterleitungen angepasst werden. Diese beiden Zeilen:
    rewrite ^/.well-known/carddav /owncloud/remote.php/carddav/ permanent;
    rewrite ^/.well-known/caldav /owncloud/remote.php/caldav/ permanent;
    müssen ersetzt werden durch:
    rewrite ^/.well-known/carddav /owncloud/remote.php/dav/ permanent;
    rewrite ^/.well-known/caldav /owncloud/remote.php/dav/ permanent;

3. vorläufiges Ergebnis

Das vorläufige Gesamtergebnis sieht so aus (bitte unbedingt noch Punkt 4 beachten, der unten folgt):

upstream php-handler {
  server 127.0.0.1:9000;
  #server unix:/var/run/php5-fpm.sock;
}

server {
  listen 80;
  server_name cloud.example.com;
  # enforce https
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name cloud.example.com;

  ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
  ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;

  # Path to the root of your installation
  root /var/www/;

  # Disable gzip to avoid the removal of the ETag header
  gzip off;

  # Uncomment if your server is build with the ngx_pagespeed module
  # This module is currently not supported.
  #pagespeed off;

  rewrite ^/.well-known/carddav /owncloud/remote.php/dav/ permanent;
  rewrite ^/.well-known/caldav /owncloud/remote.php/dav/ permanent;

  # The following 2 rules are only needed for the user_webfinger app.
  # Uncomment it if you're planning to use this app.
  #rewrite ^/.well-known/host-meta /owncloud/public.php?service=host-meta last;
  #rewrite ^/.well-known/host-meta.json /owncloud/public.php?service=host-meta-json last;

  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }

  location ^~ /owncloud/ {

    # Add headers to serve security related headers
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # set max upload size
    client_max_body_size 10G;
    fastcgi_buffers 64 4K;

    index index.php;
    error_page 403 /owncloud/core/templates/403.php;
    error_page 404 /owncloud/core/templates/404.php;

    rewrite ^/owncloud/remote/(.*) /owncloud/remote.php last;
    rewrite ^(/owncloud/core/doc/[^\/]+/)$ $1/index.html;

    try_files $uri $uri/ =404;

    location ~ ^/owncloud/(build|tests|config|lib|3rdparty|templates|data)/ {
      deny all;
    }

    location ~ ^/owncloud/(?:\.|autotest|occ|issue|indie|db_|console) {
      deny all;
    }

    location ~ \.php(?:$|/) {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param HTTPS on;
      fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
      fastcgi_pass php-handler;
      fastcgi_intercept_errors on;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the location ~ \.php(?:$|/) { block
    location ~* \.(?:css|js)$ {
      add_header Cache-Control "public, max-age=7200";
      # Add headers to serve security related headers
      add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
      add_header X-Content-Type-Options nosniff;
      add_header X-Frame-Options "SAMEORIGIN";
      add_header X-XSS-Protection "1; mode=block";
      add_header X-Robots-Tag none;
      add_header X-Download-Options noopen;
      add_header X-Permitted-Cross-Domain-Policies none;
      # Optional: Don't log access to assets
      access_log off;
    }

    # Optional: Don't log access to other assets
    location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
      access_log off;
    }
  }
}

4. WICHTIG: Anpassungen an eigene Gegebenheiten und ggfls. kosmetische Maßnahmen

Nun müssen die Punkte 4-7 der ursprünglichen Anleitung für Owncloud 8.2 beachtet werden:
nginx-Konfiguration: Owncloud im Unterordner des Webroot betreiben

Damit ist die Konfiguration fertig erstellt und es sollte dem erfolgreichen Betrieb der neuen Version Owncloud 9.0 in einem Subfolder des Webroot nichts im Wege stehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.