Seafile 6.2 mit nginx ohne fastcgi auf anderem Port

Warum arbeitest du nicht einfach mit einer subdomain oder einem ordner( z.B. /cloud ).
Nginx und auch Haproxy können damit einwandfrei umgehen.

Du brauchst halt einfach einen Reverse Proxy der dass für dich übernimmt.

@DerDanilo: Das stand doch alles bereits in meiner Problemstellung, Deine Antworten sind also nicht hilfreich.
Eine Subdomain ist keine Option und auch der Port 443 nicht. Da sitzt schon ein anderer Service drauf, der mit nginx nichts zu tun hat (und das bleibt auch so). Bis dato, also mit fastcgi, hat seit >1 Jahr alles problemlos auf Port 8443 funktioniert. Nun schreiben die Seafile-Programmierer, wir sollen kein fastcgi mehr benutzen, haben aber darauf vergessen, zu schreiben, wie das ab sofort funktionieren soll.
Und das mit der Priorisierung der Webinterfaceeinstellung steht eh schon im Manual - sogar mit einem dicken warning davor.

Wenn ich Zeit habe, poste ich die Problemstellung auch mal im englischen Teil des Forums, vielleicht hat ja da einer eine Idee

Ich habe deinen Post schon gelesen. Ports weg vom Standard für solche Dienste zu nutzen ist halt eher selten. Deshalb noch mal der Hinweis auf einen zentralen reverse Proxy der das Problem beheben würde.
Dennoch sollte es technisch funktionieren.

Beschreibe das Problem mal in English, dann verstehen es die devs auch direkt.

@shoeper hast du eine Idee?

Hallo zusammen,

mit den folgenden Einstellungen in der ccnet.conf und seahub_settings.py bekommt man den login-screen von seafile: (ich bleibe bei der ursprünglichen Anforderung, dass Seafile unter https://192.168.7.215:8443 erreichbar ist.

ccnet.conf:
SERVICE_URL = https://192.168.7.215:8443

seahub_settings.py:
FILE_SERVER_ROOT = ‘https://192.168.7.215:8443/seafhttp
SERVE_STATIC = False
MEDIA_URL = ‘/media/’
COMPRESS_URL = MEDIA_URL
STATIC_URL = MEDIA_URL + ‘assets/’
SITE_ROOT = ‘/’
LOGIN_URL = ‘https://192.168.7.215:8443/accounts/login/

Ansonsten habe ich die nginx-Konfiguration genauso verwendet wie von migibtsnet angegeben.
Mit dieser Konfiguration erreicht man die Login-Seite von Seafile und auch ein Klick auf das Logo bringt einen wieder auf die:8443-Seite. Leider schlägt der Login mit der folgenden Fehlermeldung fehl:

CSRF verification failed. Request aborted.
Reason given for failure:
Referer checking failed - https://192.168.7.215:8443/accounts/login/ does not match https://192.168.7.215/.

Danach habe ich versucht an der SITE_ROOT zu spielen, jedoch kam ich damit nicht weiter.
Vielleicht hilft das dem einen oder anderen.

Gruß
Christoph von datamate

1 Like

@daniel.pan
Does the WSGI mode have trouble with custom ports?

try this for nginx host:
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host:‘yourport’; # thats what i did and it works
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_read_timeout 1200s;
proxy_http_version 1.1;

I’m running on port 8001, so ‘yourport’ is 8001 for me.

2 Likes

Lustig, ich habe in der seahub_settings.py den Wert “LOGIN_URL” eingetragen und damit komme ich jetzt auch zur Login-Seite. Ich kann nun meine Login-Daten eingeben und werde dann, wie sollte es anders sein, wieder auf die https-Seite OHNE Port umgeleitet. Wenn ich nun aber den Port manuell anhänge und die Seite erneut aufrufe, funktioniert die ganze Seite wie wenn nichts gewesen wäre. D.h. irgendwo beim zusammenbasteln des Login-Page-Strings und wieder zurück ist ein Fisch drinnen, weil danach geht alles - Upload, Download, Management (nach wie vor nur die HP getestet, den Client lasse ich mal aussen vor).

brilliant @nihilistaX
works for me, you saved me from another sleepless night

cheers mate, very much appreciated

@nihilistaX: do you use https? I get an error with this setting

What’s the error @migibtsnet?
I do use https btw.

Folgenden Fehler bekomme ich mit dem angehängten Port:
400 Bad Request
The plain HTTP request was sent to HTTPS port

Kannst Du mal Deine komplette Config posten (seafile-Teil von Nginx, ccnet.conf, seafdav.conf, seafile.conf, seahub_settings.py) und nicht nur einzelne Blöcke? Mich würde interessieren was bei mir anders ist.

Ja, ich benutze https…
nimm mal den “proxy_set_header X-Forwarded-Proto https;”, das funktioniert nicht.

server {
    listen 8002;
	listen [::]:8002;
    server_name ...;
    rewrite ^ https://$server_name:8001$request_uri? permanent; # enforce https
}

server {
    listen 8001 ssl http2;
	listen [::]:8001 ssl http2;
	
    ssl_certificate /etc/letsencrypt/live/....;
    ssl_certificate_key /etc/letsencrypt/live/...;
    server_name ...;
    	
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
    ssl_prefer_server_ciphers on;
	
	proxy_set_header X-Forwarded-For $remote_addr;
		
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
    server_tokens off;
	
    client_max_body_size 10G; # set max upload size
    
	location / {
        proxy_pass         http://127.0.0.1:8000;
        proxy_set_header   Host $host:8001;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
		proxy_read_timeout  1200s;
		proxy_http_version 1.1;
	
    #   used for view/edit office file via Office Online Server
        client_max_body_size 0;

	    access_log      /var/log/nginx/seahub.access.log;
        error_log       /var/log/nginx/seahub.error.log;
    }
	
   
location /seafdav {
        fastcgi_pass    127.0.0.1:8090;
        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   HTTPS               on;

        client_max_body_size 0;

        access_log      /var/log/nginx/seafdav.access.log;
        error_log       /var/log/nginx/seafdav.error.log;
    }
	
	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;
        proxy_request_buffering off;
        proxy_http_version 1.1;
	}
}
1 Like

@nihilistaX: so, ich habe jetzt nochmal alles weggeworfen und auf einem zweiten Server alles neu aufgesetzt. Vorgehensweise streng nach manual ohne irgenwelche Anpassungen. Und egal welche Dateien ich anschließend modifiziere, irgendwo stellt es das Teil ohne fastcgi mit wechselnden Fehlern auf.
Kannst Du die restlichen Dateien aus Deinem seafile/conf-Verzeichnis posten? Dann hätten wir gleich eine Referenz unter dem Motto “mit der Config funktionierts” ohne sich alles erst zusammensuchen zu müssen

ccnet.conf:

[General]
USER_NAME = Name vom Server
ID = 16b275d91aa03872a5d0f5105f7a60c8ca51f79f
NAME = Name vom Server
SERVICE_URL = https://meineadresse:8001

[Network]
PORT = 10001

[Client]
PORT = 13418

Die restlichen files sind standard, daran kanns nicht liegen. Ich gehe mal davon aus, du benutzt sqlite und die Berechtigungen sind richtig gesetzt. Bei mir läufts übrigens unter root.
Die location /media habe ich (wie oben zu sehen) nicht drin, damit ging bei mir plötzlich gar nix,also mal auskommentieren wenn du sie noch hast. Wichtig ist proxy_set_header Host $host:8001; auf den richtigen port zu setzen. Habe übrigens nginx 1.10.3 aus den jessie-backports laufen, könnte mir noch vorstellen, dass der wesentlich ältere (1.6.x) aus dem jessie repo das Problem ist, im Zweifelsfall einfach mal den neueren testen.

So, jetzt funktioniert es. Bei mir gab es die [Network]-Einstellung nicht und die media-location habe ich auch entfernt.
Zusätzlich musste ich die Zeile “proxy_set_header X-Forwarded-Proto https;” wieder einfügen, weil ohne die wurde permanent das https vor dem URL entfernt (der Port und alles andere blieb allerdings erhalten).
Die nginx-Version war übrigens kein Problem, da in Debian Stretch 1.10.3 die Standardversion ist (das hatte ich zwischendurch schon mal überprüft, da ich auch die Vermutung hatte, dass nginx zu alt sein könnte).
Und MySQL, aber da paßt auch alles.
Sicherheitshalbe habe ich auch die Datei seahub_settings.pyc nach jeder Änderung gelöscht, damit keine alten Einstellungen aus dem Cache erhalten bleiben.

Na dannpasst es ja jetzt. Eigentlich sind die [Network] und [Client] Ports automatisch drin bzw. werden beim Setup abgefragt, kann aber auch sein, dass sie bei mir von irgendeiner alten Version übernommen wurden. Das “proxy_set_header X-Forwarded-Proto https;” rein muss ist witzig, bei mir ist es genau anders herum und wird auch von https://meinedyndns korrekt intern auf http://lokale.ip:8000 weitergeleitet.

Es gibt eine generische variable von nginx (siehe hier) namens $server_port für diesen Zweck.

Die nginx config ist im offiziellen Server Manual etc. falsch, zumindest nicht geeignet um seahub unter einem anderen Port laufen zu lassen. Vielleicht kann einer der Maintainer die folgende richtige config hinzufügen.

Für http:

location / {

proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host:$server_port; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Host $server_name; 
proxy_read_timeout 1200s; # used for view/edit office file via Office Online Server

client_max_body_size 0;

access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log; 

}

Für https:

location / {

proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto https; 

access_log /var/log/nginx/seahub.access.log; 
error_log /var/log/nginx/seahub.error.log;

proxy_read_timeout 1200s; 
client_max_body_size 0; 

}

3 Likes

Die Variable $server_port hatte ich auch schon entdeckt und auch damit experimentiert. Allerdings hat das zu dem Zeitpunkt überhaupt nichts gebracht, daher habe ich damit wieder aufgehört.
Wenn ich heute Abend Zeit habe, werde ich mal schauen, ob es mit der aktuellen Config funktioniert und dann berichten.

Hier bei mir hat es funktioniert, deshalb auch mein like für den tip, lol

1 Like

So, ein kurzer Test offenbart:
jetzt funktionierts auch mit der Variable.
Btw: Danke für den Link, der erklärt die Variablen echt gut.

1 Like