Seafile 6.2 mit nginx ohne fastcgi auf anderem Port


#1

Hallo,
ich benutze Seafile jetzt schon eine Weile unter Debian und bin sehr zufrieden damit.
Aufgrund von technischen Gegebenheiten läuft der Server bei mir allerdings nicht auf dem Standard-HTTPS-Port sondern auf 8443 (eine andere Subdomain ist derzeit leider auch nicht möglich). Bisher war das mit fastcgi überhaupt kein Problem, einfach die Ports unter nginx, FILE_SERVER_ROOT und SITE_BASE angepaßt und es hat funktioniert. Mit der neuen Methode ohne fastcgi funktioniert das allerdings nicht (zumindest das Webinterface, den Client habe ich dann nicht mehr getestet). Immer wenn ich versuche, die Seite mit dem anderen Port aufzurufen erfolgt eine Umleitung auf die Login-Seite ohne angehängten Port, was natürlich nicht funktionieren kann. Testweise habe ich den Server auf den Port 443 gelegt, dann hat alles funktioniert, aber mit 8443 funktioniert nicht viel.
Kann mir jemand sagen, was ich wo in der Config ändern muss damit es funktioniert?
Hier mal die funktionierende nginx-Config (mit fastcgi):
server {
listen 8443 http2;
server_name mein.server.name;

  ssl on;
  ssl_certificate /etc/ssl/certs/server.pem;
  ssl_certificate_key /etc/ssl/private/server.key;
  error_page 497  h ttps://$host:$server_port$request_uri;

  client_max_body_size 10G; # set max upload size

  proxy_set_header X-Forwarded-For $remote_addr;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

  server_tokens off;

  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;
    fastcgi_param   HTTPS               on;
    fastcgi_param   HTTP_SCHEME         https;

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

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

  location /media {
    root /opt/seafile/server/seafile-server-latest/seahub;
  }

  location /seafdav {
    fastcgi_pass    127.0.0.1:8080;
    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;
    fastcgi_param   HTTPS               on;
    client_max_body_size 0;
    proxy_request_buffering off;
    access_log      /var/log/nginx/seafdav.access.log;
    error_log       /var/log/nginx/seafdav.error.log;
  }
}

Versucht habe ich folgendes (einfach copy paste aus dem manual):
location / {
proxy_pass h ttp://127.0.0.1:8000;
proxy_set_header Host $host;
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;
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;

}

location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass h ttp://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 /opt/seafile/server/seafile-server-latest/seahub;
}

location /seafdav {
fastcgi_pass 127.0.0.1:8080;
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;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;

client_max_body_size 0;
proxy_connect_timeout  36000s;
proxy_read_timeout  36000s;
proxy_send_timeout  36000s;
send_timeout  36000s;

proxy_request_buffering off;
access_log      /var/log/nginx/seafdav.access.log;
error_log       /var/log/nginx/seafdav.error.log;

}

Mit der Config wird aber nicht der Server mit
h ttps://mein.server.name:8443
aufgerufen, sondern es erfolgt sofort eine Umleitung auf
h ttps://mein.server.name/accounts/login?next=/ (<= hier fehlt auf einmal der übergebene Port)
was zu einem 404-Fehler führt.

Danke


[SOLVED]WSGI Mode Setup Question
Unable to use WEB UI in 6.2.5 when switching from fastcgi to wsgi
#2

100% identisches Problem hier


#3

Ihr habt die config von Seafile angepasst?


#4

Moin moin,

so schaut die nicht-funktionierende Config bei mir aus.
Sobald ich alle 8001 in 443 ändere funktioniert alles wunderbar.

ccnet.conf

[General]
USER_NAME = seacloud
ID = myID
NAME = seacloud
SERVICE_URL = https://myDomain:8001

seahub_settings.py

# -*- coding: utf-8 -*-
SECRET_KEY = “myKey”
FILE_SERVER_ROOT = ‘https://myDomain:8001/seafhttp
CACHES = {
‘default’: {
‘BACKEND’: ‘django_pylibmc.memcached.PyLibMCCache’,
‘LOCATION’: ‘127.0.0.1:11211’,
}
}

nginx config

server {
    listen 8001 ssl http2;
    listen [::]:8001 ssl http2;
    ssl_certificate <myCert>;
    ssl_certificate_key <myKey>;
    server_name <myDomain>;
    server_tokens off;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:5m;
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers on;
    proxy_set_header X-Forwarded-For $remote_addr;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         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;
         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;
    }
        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;
        proxy_request_buffering off;
        send_timeout  36000s;
    }
       location /media {
       root /home/seafile/seafile-server-latest/seahub;
      }
}

cheers,


#5

Webinterface Admin Konfig wird höher priorisiert als diese der Konfig Datei.

Wir den Devs auch schon 100Mio mal mitgeteilt, dass dies in die Anleitung vernünfitg rein muss.
Die aktuelle Admin Anleitung ist einfach nur ein großer Haufen von Notizen…


#6

Im WebIf sehe ich folgendes: das sollte ja passen, oder versteh ich was falsch?


#7

Das sollte soweit passen.


#8

Gut, oder auch nicht :slight_smile: denn das Problem bleibt das gleiche.

Ist übrigens ne frische Test-Installation von letzter Nacht um auszuschließen, daß mein produktiver Server nicht vermurkst ist. Leider unter beiden Installationen das gleiche Problem.
Aktuell bleibt mir also nichts anderes üblich als entweder auf 443 zu wechseln, oder zurück zu fastcgi :frowning:


#9

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.


#10

@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


#11

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?


#12

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


#13

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


#14

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.


Nginx Reverse Proxy
#15

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).


#16

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

cheers mate, very much appreciated


#17

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


#18

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


#19

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.


#20

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;
	}
}