Upload Limit in Seafile erhöhen unter Apache und Nginx

Seafile LogoAls Dateiaustauschplattform und für die Synchronisation von Dateien eignet sich Seafile sowohl im Einzelbenutzerbetrieb als auch für Arbeitsgruppen hervorragend als Alternative zu Dropbox oder Google Drive. Mit dem Seafile Client können Dateien beliebiger Größe mit dem Server synchronisiert werden. Wer jedoch Dritten einen Upload über das Webinterface Seahub ermöglichen möchte, der stößt möglicherweise schnell an die Grenzen des Webservers. In diesem Artikel beschreiben wir, wie Sie das Upload Limit in Seafile mit Hilfe der max_upload_size Direktive verändern und was Sie dabei beachten müssen.

Änderung des Upload Limits in Seafile in zwei Schritten

Um die maximal zugelassene Größe für einen Upload über das Webinterface Seahub in Seafile zu verändern, müssen sowohl Änderungen in der Seafile- als auch in der Webserver-Konfiguration vorgenommen werden. Zunächst erklären wir die Konfigurationsänderungen von Seafile und erläutern dann, welche Anpassungen am Webserver vorzunehmen sind. Wir gehen in diesem Artikel auf den Apache Webserver und seinen stärksten Konkurrenten Nginx ein.

1. Anpassung der Seafile Server-Konfiguration

Die Anpassung des File Size Limits erfolgt über die Konfigurationsdatei des Seafile-Webservers. Soll die maximale Dateigröße für Uploads zum Beispiel auf 100MB verkleinert werden, so muss in der Config-Datei Folgendes ergänzt werden:

[fileserver]
max_upload_size=100

Ist der Eintrag für [fileserver] in der Konfigurationsdatei bereits vorhanden, dann muss dieser natürlich nur um die entsprechende Option erweitert werden. Da die Größe von Seafile ausschließlich in Megabyte zugelassen wird, ist außer der Zahl nichts weiter hinzuzufügen. Nach einem Neustart wird diese Änderung aktiv.

Zur Erhöhung des Uploadlimits sind analoge Einträge notwendig. Möchte man zum Beispiel eine maximale Dateigröße von 3GB zulassen, dann muss max_upload_size einfach auf den Wert 3072 gesetzt werden.

Wie in der Seafile Dokumentation beschrieben, müssen die Einstellungsänderungen in der Datei seafile.conf vorgenommen werden, welche sich bis zur Seafile Version 4 noch im Ordner “seafile-data” befand, ab Version 5 aber mit allen anderen Konfigurationsdateien in den Ordner “conf” verschoben wurde. Einige Tests zeigten, dass scheinbar eine Fallback-Funktion besteht, die den gleichen Eintrag auch in der Datei ccnet.conf akzeptiert, sollte in der seafile.conf kein Eintrag vorhanden sein.

2. Anpassung der Webserver-Konfiguration

Abhängig vom eingesetzten Webserver muss die maximal zulässige Größe des HTTP Request Body ebenfalls angepasst werden.

2a. Apache Webserver

Bei Apache Webservern regelt die LimitRequestBody Direktive die maximale Größe des HTTP Requests. Dieser Wert ist bei Apache standardmäßig auf den Wert „0“ eingestellt, was „keine Begrenzung“ bedeutet. (Hinweis: Der Vollständigkeit wegen soll an dieser Stelle erwähnt werden, dass der maximal zulässige Wert erst ab Apache Version 2.2 wirklich unbegrenzt ist. Bei den Vorgängerversionen lag das Limit bei 2Gigabyte.) Eine Standardinstallation gemäß Seafile Manual mit der genannten Anpassung sähe folgendermaßen aus:

<VirtualHost *:80>
ServerName www.myseafile.com
DocumentRoot /var/www
Alias /media /home/user/haiwen/seafile-server-latest/seahub/media

RewriteEngine On

<Location /media>
Require all granted
</Location>

#
# seafile fileserver
#
ProxyPass /seafhttp http://127.0.0.1:8082
ProxyPassReverse /seafhttp http://127.0.0.1:8082
RewriteRule ^/seafhttp - [QSA,L]
LimitRequestBody 104857600

#
# seahub
#
SetEnvIf Request_URI . proxy-fcgi-pathinfo=unescape
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ProxyPass / fcgi://127.0.0.1:8000/
</VirtualHost>
 

2b. Nginx Webserver

Beim Einsatz von Nginx wird die Begrenzung durch das Modul client_max_body_size konfiguriert. Der gewünschte Wert wird in diesem Fall in Megabyte angegeben. Die Kennzeichnung mit “M” für Megabyte ist dennoch obligatorisch. Für 2GB entspräche dies also „2048M“.

Das Seafile Handbuch enthält bereits eine vollständige Nginx-Konfiguration:

server {
  listen 80;
  server_name www.myseafile.com;

  proxy_set_header X-Forwarded-For $remote_addr;

  location / {
    fastcgi_pass 127.0.0.1:8000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    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 SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
    fastcgi_param REMOTE_ADDR $remote_addr;

    access_log /var/log/nginx/seahub.access.log;
    error_log /var/log/nginx/seahub.error.log;
    fastcgi_read_timeout 36000;
  }

  location /seafhttp {
    rewrite ^/seafhttp(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8082;
    client_max_body_size 0;
    proxy_connect_timeout 36000s;
    proxy_read_timeout 36000s;
    proxy_send_timeout 36000s;
    send_timeout 36000s;
  }

  location /media {
    root /home/user/haiwen/seafile-server-latest/seahub;
  }
}

Sicherheitshinweis: Gefahr durch höheres Seafile-Upload Limit

Bevor Einstellungen an Seafile und auch am Webserver verändert werden, um das Upload Limit in Seafile zu erhöhen, sollte zunächst genau überlegt werden, ob der Vorteil, der durch die Änderung erzielt werden soll, die Nachteile überwiegt. Eine Veränderung der zulässigen Größe für einen HTTP Request Body hat zur Folge, dass große Requests nicht mehr sofort verworfen, sondern zunächst vollständig vom Webserver empfangen werden. Die Erhöhung des File Size Limits in Seafile machen einen Webserver somit leicht angreifbar, da er bereits mit einer geringen Anzahl gleichzeitiger Anfragen in die Knie gezwungen werden kann. Auch ist die Wahl des passenden Timeouts eine schwierige Aufgabe, da die schwankende Bandbreite oder systeminterne Prozesse die Fertigstellung eines Uploads beeinflussen können.

Fazit

Eine moderate Erhöhung des Upload Limits in Seafile ist ohne weiteres möglich. Mehr als eine Ergänzung in der Seafile-Konfigurationsdatei und eine Anpassung der der Webserver-Einstellungen sind nicht notwendig.

Wenn man das File Size Limit in Seafile deutlich erhöht, dann kann es dennoch bei großen Uploads zu Abbrüchen kommen. In diesen Fällen gilt es, Buffering und Timeouts des Webservers so zu konfigurieren, dass ihm genügend Zeit für Empfang und Verarbeitung der Daten zur Verfügung bleibt. In manchen Webservern sind die dazu notwendigen Konfigurationseinstellungen aber erst ab höheren Versionen verfügbar. Den jeweiligen Webserver gilt es jedoch mit Bedacht zu konfigurieren, da man damit ein nicht geringes Sicherheitsrisiko eingeht.

Für Fragen rund um Seafile steht Ihnen das ionas-Team gerne an 7 Tagen die Woche zur Verfügung: +49 (0)6131 3270777. Wenn Sie Seafile privat oder in Ihrem Unternehmen nutzen möchten, dann haben wir mit unseren ionas-Servern eine komfortable Implementierungsoption.

geschrieben von

Christoph Dyllick-Brenzinger

Christoph ist Gründer und Chefentwickler von datamate. Er ist ein absoluter Linux-Fan und hat schon früh seine Leidenschaft für Technik und Programmierung entdeckt. Seine langjährige Erfahrung als Unternehmensberater spürt man regelmäßig, wenn er nach optimalen Lösungen für die Kunden sucht. Wenn er nicht gerade den Tennisplatz unsicher macht oder bei Overwatch sein Liga-Ranking verbessert, verbringt Christoph seine Freizeit mit seiner Frau und seinen drei Kindern.