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.