Seafile auf nicht Standard-Port und OnlyOffice via Subfolder


#1

Moin!

Ich betreibe bei mir Seafile auf Port 8001 via NGINX, da auf Port 80 bzw. 443 schon andere Dienste laufen (auf einem anderen Server), welche sich nur schwer ändern lassen (Stichwort Windows SBS).

Das funktioniert soweit auch super. Nun möchte ich gerne OnlyOffice via Subfolder integrieren, jedoch funktioniert dies nicht.

Ich habe die NGINX Einstellungen vom offiziellen Manual übernommen, jedoch passiert folgendes bei Aufruf der Welcome Seite:

Ich rufe auf: https://meinedomain:8001/onlyofficeds/welcome
Der Browser springt zu: https://meinedomain:8001/welcome

und Seafile gibt die Fehlermeldung aus “Es tut uns leid, aber die angefragte Seite wurde nicht gefunden.”

Ich bin mir sicher, dass ich irgendwo angeben müsste, dass der Port 8001 ist, jedoch weis ich nicht wo?!

Für Hilfe wäre ich überaus dankbar.

Hier meine NGINX config

map $http_x_forwarded_proto $the_scheme {
    default $http_x_forwarded_proto;
    "" $scheme;
}

map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $host;
}

map $http_upgrade $proxy_connection {
    default upgrade;
    "" close;
}

server {
listen 8001;
ssl on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
server_name domain;
error_page 497  https://$host:$server_port$request_uri;
server_name domain;    
proxy_set_header X-Forwarded-For $remote_addr;
ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

 location /.well-known/acme-challenge {
     default_type "text/plain";
     root /var/www/certbot;
}

location / {
     proxy_pass         http://127.0.0.1:8000;
     proxy_set_header   Host $host:$server_port;
     proxy_set_header   X-Real-IP $remote_addr:$server_port;
     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header   X-Forwarded-Host $server_name:$server_port;
     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_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout  36000s;
    proxy_read_timeout  36000s;
    proxy_send_timeout  36000s;

    send_timeout  36000s;
}

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

location /onlyofficeds/ {

    # THIS ONE IS IMPORTANT ! - Trailing slash !
    proxy_pass http://127.0.0.1:88/;

    proxy_http_version 1.1;
    client_max_body_size 100M; # Limit Document size to 100MB
    proxy_read_timeout 3600s;
    proxy_connect_timeout 3600s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $proxy_connection;

    proxy_set_header X-Forwarded-Host $the_host/onlyofficeds;

    proxy_set_header X-Forwarded-Proto $the_scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name:$server_port;
    }
}

P.S. Wie poste ich hier Code?!

Besten Dank
themmm


#2

Läuft OnlyOffice sicher auf Port 88?Für Code gibt’s über dem Textfeld entsprechendes Zeichen.


#3

@bionade24 Ja er läuft. Wenn ich http://serveradresse:88/welcome aufrufe komme ich auf die Willkommensseite (Document Server is running)


#4

Kannst du bitte deine seahub.conf posten?


#5

Die nginx seahub.conf oder seahub_settings.py?


#6

Tschuldigung, bin stark übermüdet, meine natürlich die seahub_settings.py.


#7

Kein Ding :wink:

Hier die seahub_settings.py (anonymisiert)

SECRET_KEY = ""
EMAIL_USE_TLS = True
EMAIL_HOST = '

EMAIL_HOST_USER = '

EMAIL_HOST_PASSWORD = '

EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = '

SERVER_EMAIL = '

SITE_NAME = '
****’

Wobei nach meinem Verständsnis seahub ja keine Rolle spielen sollte, da ja nginx als Proxy fungiert und seahub somit keinen Einfluss haben sollte bei einem Aufruf von http://meinedomain.de:8001/onlyofficeds/welcome ?!


#8

Ich habe die OnlyOffice Konfiguration noch nicht eingebracht, da ich erstmal den Aufruf von OnlyOffice über NGINX testen wollte.


#9

Also wo genau der Fehler liegt weiß ich nicht, aber die weiterleituung auf Port 88 funktioniert nicht richtig. Denn wenn du OnlyOffice über Port 88 direkt aufrufst, dann umgehst du das proxying. Vielleicht guckst du mal auf www.nginx.org, ich fand der ihr FAQ immer sehr umfangreich und gut gestaltet, hab für vieles dort eine Lösung gefunden.


#10

OK werde mich da mal durchkämpfen.

Danke für deine Mühe! Wenn du noch einen Geistesblitz hast, lass es mich wissen :grinning:


#11

Warum ist das nicht in deiner seahub_settings.conf?

Enable Only Office

ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = True
ONLYOFFICE_APIJS_URL = ‘http{s}://{your Seafile server’s domain or IP}/{your subdolder}/web-apps/apps/api/documents/api.js’
ONLYOFFICE_FILE_EXTENSION = (‘doc’, ‘docx’, ‘ppt’, ‘pptx’, ‘xls’, ‘xlsx’, ‘odt’, ‘fodt’, ‘odp’, ‘fodp’, ‘ods’, ‘fods’)
ONLYOFFICE_EDIT_FILE_EXTENSION = (‘docx’, ‘pptx’, ‘xlsx’)


#12

Aber auch mit diesen Einstellungen funktioniert es nicht. Werde da mal weiter forschen …


#13

Hallo themmm,

nach deiner Beschreibung würde ich sagen, dass dies ganz klar ein nginx und kein seafile/seahub Problem ist. Probier mal bitte in deinem location /onlyoffice/ die letzte Zeile mit $server_name:$server_port zu entfernen. Ich glaube nämlich, dass die den Fehler verursacht:

  1. Aufruf von https://meinedomain.de:8001/onlyofficeds/welcome -> nginx springt in die location /onlyoffice/ und versucht ein Forwarding zu $server_name:$server_port zu machen. Er soll aber eigentlich ein Forwarding zu $the_host/onlyofficeds machen.
  2. dann greifen aber nicht die nginx-Konfigurationsdateien von onlyoffice unter /etc/nginx/includes/onlyoffice-* und /etc/nginx/conf.d/onlyoffice-* sondern stattdessen wird error_page 497 https://$host:$server_port$request_uri; gezogen, was dich wieder zu meinedomain:8001/welcome bringt.

Wenn das nicht hilft, schick mir bitte nochmal deine komplette nginx-konfiguration zu seafile und ich teste das bei mir.

Viele Grüße
Christoph


#14

Hallo Christoph,

sorry das ich mich jetzt erst zurückmelde. Besten Dank für deinen Hinweis. Nun hat sich die Fehlermeldung geändert. Ich erhalte eine Webseite mit dem Fehler:

Cannot GET //welcome

Hier meine anonymisierte config:

# Required for only office document server
map $http_x_forwarded_proto $the_scheme {
    default $http_x_forwarded_proto;
    "" $scheme;
}

map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $host;
}

map $http_upgrade $proxy_connection {
    default upgrade;
    "" close;
}

server {
listen 8001;
ssl on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
server_name remote.domain.de;
error_page 497  https://$host:$server_port$request_uri;
server_name remote.domain.de;    
proxy_set_header X-Forwarded-For $remote_addr;
ssl_certificate /etc/letsencrypt/live/remote.domain.de/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/remote.domain.de/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

#Webroot für Let's Encrypt

location /.well-known/acme-challenge {
     default_type "text/plain";
     root /var/www/certbot;
}

#Seafile-Config

location / {
     proxy_pass         http://127.0.0.1:8000;
     proxy_set_header   Host $host:$server_port;
     proxy_set_header   X-Real-IP $remote_addr:$server_port;
     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header   X-Forwarded-Host $server_name:$server_port;
     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_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout  36000s;
    proxy_read_timeout  36000s;
    proxy_send_timeout  36000s;

    send_timeout  36000s;
}

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

#OnlyOffice

location /onlyofficeds {

   # THIS ONE IS IMPORTANT ! - Trailing slash !
    proxy_pass http://127.0.0.1:88/;

    proxy_http_version 1.1;
    client_max_body_size 100M; # Limit Document size to 100MB
    proxy_read_timeout 3600s;
    proxy_connect_timeout 3600s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $proxy_connection;

    # THIS ONE IS IMPORTANT ! - Subfolder and NO trailing slash !
    proxy_set_header X-Forwarded-Host $the_host/onlyofficeds;

    proxy_set_header X-Forwarded-Proto $the_scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Besten Dank
themmm


#15

TCP 88 ist der Port für Kerberos, den dein SBS für das AD benötigt. Ich vermute da liegt die Ursache und rate dazu einen freien Port zu verwenden :slight_smile:


#16

Besten Dank für die Antwort.

Der Seafile Server läuft nicht auf dem selben Rechner wie der SBS, somit sollte der Port ja eigentlich keine Rolle spielen. Ich habe meine Frage oben entsprechend angepasst.

Beste Grüße
themmm


#17

Es läuft und die Problemlösung war dann doch ganz einfach. Mit folgendem Eintrag in der NGINX config klappt es:

location /onlyofficeds {

   # THIS ONE IS IMPORTANT ! - Trailing slash !
    proxy_pass http://127.0.0.1:88/;

    proxy_http_version 1.1;
    client_max_body_size 100M; # Limit Document size to 100MB
    proxy_read_timeout 3600s;
    proxy_connect_timeout 3600s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $proxy_connection;

    # THIS ONE IS IMPORTANT ! - Subfolder and NO trailing slash !
    proxy_set_header X-Forwarded-Host $the_host:8001/onlyofficeds;

    proxy_set_header X-Forwarded-Proto $the_scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

Besten Dank an alle!