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 Zeileadd_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.