ownCloud Konfiguration mit Nginx: Hosting und Reverse Proxy

ownCloud

Da die Einrichtung doch etwas zickiger verlief als erwartet, fasse ich kurz meine Erfahrung für die Nachwelt zusammen.

Artikel zur Installation finden sich zur Genüge, daher bleibt dieser Schritt bei mir aus.

Eingesetzt habe ich Debian Jessie (amd64), auf dem Reverse Proxy läuft ein nginx/1.7.7, auf dem ownCloud-Server ein nginx/1.6.2 sowie ownCloud selber in Version 7.0.3.

Ich war vom ownCloud-Client eher enttäuscht, werde ihn persönlich nicht benutzen.
Meine wunderschöne, vereinfachte Darstellung der Umgebung:

ownCloud Networking Example
ownCloud Networking Example

Die Nginx Konfiguration des Reverse-Proxys.
Wichtig: proxy_pass, proxy_set_header

server {
        listen 443 ssl;
        ssl_certificate /etc/ssl/www.crt;
        ssl_certificate_key /etc/ssl/www.key;
        add_header Strict-Transport-Security max-age=15768000; # six months
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA';
        server_name cloud.domain.tld;
        location / {
                proxy_pass http://10.0.0.40;
                proxy_set_header X-Forwarded-Host cloud.domain.tld;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Forwarded-For $remote_addr;
        }
}

Die Nginx Konfiguration auf Seite des ownCloud-Servers.
Ich hatte Probleme, wenn ein Servername gesetzt war, daher „Wildcard“:

server {
  listen 80;

  root /usr/share/nginx/html;
  index index.php index.html index.htm;

  server_name _;

  rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
  rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
  rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

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

  location ~ ^/(data|config|db_structure\.xml) {
    deny all;
  }

  location / {
    rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
    rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
    rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
    rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
    try_files $uri $uri/ index.php;
  }

  location ~ ^(.+?\.php)(/.*)?$ {
    try_files $1 =404;
    #fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param QUERY_STRING       $query_string;
    fastcgi_param REQUEST_METHOD     $request_method;
    fastcgi_param CONTENT_TYPE       $content_type;
    fastcgi_param CONTENT_LENGTH     $content_length;
    fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param REQUEST_URI        $request_uri;
    fastcgi_param DOCUMENT_URI       $document_uri;
    fastcgi_param DOCUMENT_ROOT      $document_root;
    fastcgi_param SERVER_PROTOCOL    $server_protocol;
    fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param REMOTE_ADDR        $remote_addr;
    fastcgi_param REMOTE_PORT        $remote_port;
    fastcgi_param SERVER_ADDR        $server_addr;
    fastcgi_param SERVER_PORT        $server_port;
    fastcgi_param SERVER_NAME        $server_name;
    fastcgi_param REDIRECT_STATUS    200;
    fastcgi_param SCRIPT_FILENAME $document_root$1;
    fastcgi_param PATH_INFO $2;
    fastcgi_param HTTPS on;
  }

  location ~*.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
  }

  location ~ /\. {
    deny all;
  }
}

ownCloud Webroot, Datei „config/config.php“
Wichtig: overwritehost, overwritecondaddr, trusted_domains, overwrite.cli.url

 'instid',
  'passwordsalt' => 'salt',
  'trusted_domains' =>
  array (
    0 => '10.0.0.40',
    1 => 'cloud.domain.tld',
  ),
  'datadirectory' => '/usr/share/cloud_data',
  'overwrite.cli.url' => 'https://cloud.domain.tld',
  'dbtype' => 'mysql',
  'version' => '7.0.3.4',
  'dbname' => 'db',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'user',
  'dbpassword' => 'password',
  'installed' => true,
  'overwritehost'     => 'cloud.domain.tld',
  'overwriteprotocol' => 'https',
  'overwritewebroot'  => '/',
  'overwritecondaddr' => '^10\.0\.0\.10$',
);

2 Antworten auf “ownCloud Konfiguration mit Nginx: Hosting und Reverse Proxy

  1. Stefan

    Halo Andre, vielen Dank für den Artikel. Es gibt für diesen Anwendungsfall nicht viel im Netzt zu finden. Ich betreibe mehrere Raspberry Pi. Einer ist mein Gateway in das Internet. Ein weiterer macht nichts anderes als owncloud. Die nginx Versin auf den Gateway owncloud Server ist 1.6.2. Nach den Update auf owncloud 8.2.2 funktioniert das Ganze bei mir leider nicht leider mehr. Gibt es hierzu ein Update?

Schreibe einen Kommentar

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