RasPi Series {14} – nginx für Nextcloud vorbereiten

Ein wenig Vorbereitung, damit eine geschmeidige Installation durchgeführt werden kann...

    Inhaltsangabe
  1. nginx konfigurieren
  2. Mögliche Probleme
    1. ERR_SPDY_PROTOCOL_ERROR
    2. 502 Bad Gateway error
    3. 504 Gateway Timeout
  3. Installationsdatei herunterladen

Im letzten Beitrag haben wir gelernt, was eine SSL Verschlüsselung ist und wozu diese gut ist. Wir haben gesehen, wie einfach es ist, sich ein Zertifikat generieren zu lassen und haben uns auch eins generiert.

In diesem Beitrag werden wir unser nginx für die Verwendung von nextcloud konfigurieren. Da die von nextcloud empfohlene Konfiguration nicht fehlerfrei funktioniert, werden wir die Konfiguration anpassen und am Ende erkläre ich euch, was wir verändert haben und wieso wir es verändert haben.

nginx konfigurieren

Es gibt eine Standardkonfiguration, welches von nextcloud empfohlen wird. Diese verursacht jedoch Probleme. Diesen werden wir etwas abändern. Damit wir das tun können, verbinden wir uns mit unserem Raspberry Pi über SSH (MobaXterm) und öffnen die nginx Domain-Konfiguration mit folgendem Befehl:

sudo nano /etc/nginx/sites-available/default

Falls wir unseren Raspberry Pi nur mit nextcloud verwenden werden, können wir den gesamten Dateiinhalt löschen und die unten genannte Konfiguration einfügen. Falls wir jedoch nextcloud als eine zusätzliche Komponente verwenden möchten, müssen wir die unten aufgeführte Konfiguration einfach der Datei anhängen.

Bevor ihr jedoch die unten genannte Konfiguration bei euch einfügen könnt, müsst ihr einige Einstellungen eurem Webserver anpassen.

  • DEINECLOUDADRESSE
    Hier kommt die Domain (DDNS Adresse) deiner Cloud hin (z.B. cloud.google.com)
  • Hier gebt ihr den Pfad zu nextcloud an (z.B. /var/www/html/cloud/)
upstream php-handler {
    server 127.0.0.1:9000;
}

server {
    listen 80;
    listen [::]:80;
    server_name DEINECLOUDADRESSE;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name DEINECLOUDADRESSE;
    add_header Strict-Transport-Security max-age=15552000;

    ssl_certificate /etc/letsencrypt/live/DEINECLOUDADRESSE/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/DEINECLOUDADRESSE/privkey.pem;

    add_header X-Content-Type-Options nosniff;
    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;
    add_header Referrer-Policy no-referrer;

    root PFADZURCLOUD;

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


    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;


    location / {
        proxy_http_version 1.1;
        proxy_set_header Connection „“;
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|setup-nextcloud|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        include snippets/fastcgi-php.conf;
        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;
        fastcgi_param front_controller_active true;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
        fastcgi_read_timeout 240;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        add_header X-Content-Type-Options nosniff;
        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;
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
    }
}


server {
    listen          81;
    server_name     localhost;
    root        /usr/share/phpmyadmin;
    index       index.php index.html index.htm;
    if (!-e $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

Sobald ihr die genannten Felder ersetzt habt, könnt ihr die Datei schließen (Strg + X) und die Änderungen bestätigen.

Mögliche Probleme

Damit ihr versteht, was ich an dieser Datei geändert habe und wieso ich das gemacht habe, werde ich euch nachfolgend die möglichen Fehlerquellen nennen. Diese sind tatsächlich bei mir aufgetreten und ich musste diese nach und nach ausmerzen.

ERR_SPDY_PROTOCOL_ERROR

SPDY ist ein Projekt von Google, welches eine schnellere Verbindung zum Server ermöglichen soll. Es befindet sich aktuell noch in der experimentellen Phase und kann Fehler verursachen. Bei mir hat es zumindest Fehler verursacht. In der originalen Empfehlung von nextcloud, wird als Protokoll http2 angegeben. Diesen habe ich aus der Konfiguration entfernt.

502 Bad Gateway error

Diese Fehlermeldung ist gekommen, weil ich meinen SSL Schlüssel nicht richtig hinterlegt hatte. Falls diese Fehlermeldung kommt, solltet ihr den Pfad zu eurem SSH Schlüssel kontrollieren und ggf. korrigieren.

504 Gateway Timeout

Falls diese Fehlermeldung kommt, hat euer Webserver (Raspberry Pi) für eine Aufgabe zu lange gebraucht und deswegen die Operation abgebrochen. Während der Installation von nextcloud ist diese Fehlermeldung bei mir aufgetaucht und deswegen habe ich in die Konfiguration die Zeile fastcgi_read_timeout hinzugefügt.

Installationsdatei herunterladen

Im Rahmen der Vorbereitung müssen wir noch die Installationsdatei auf unseren Webserver (Raspberry Pi) herunterladen. Dazu geben wir per SSH (MobaXterm) folgenden Befehl ein, um als Superuser zu operieren:

sudo su

Anschließend öffnen gehen wir zum Ordner, wo unsere Cloud installiert werden soll und laden dort die nextcloud Installationsdatei herunter.

cd /var/www/html/cloud/ && wget https://download.nextcloud.com/server/installer/setup-nextcloud.php

Nachdem wir das gemacht haben, können wir bereits nextcloud unter unserer Domain /setup-nextcloud.php (z.B. cloud.google.com/setup-nextcloud.php) installieren. Falls wir jedoch eine Externe Festplatte für die Cloud nutzen möchten, wird noch ein Zwischen Prozess nötig sein.

Wir wissen jetzt, wie wir die Konfiguration von nextcloud anpassen müssen, damit nextcloud ohne Probleme auf unserem Raspberry Pi installiert und genutzt werden kann.

Im nächsten Beitrag werden wir sehen, wie man eine externe Festplatte an den Raspberry Pi anschließt, diesen formatiert und in das System einbindet.

Themen

Cloud DIY Erfahrung Linux nginx php Raspberry Pi SSH Tipps Website

Beitrag teilen

WhatsAppen

Folgen Sie uns