OPNsense Forum

International Forums => German - Deutsch => Topic started by: shb256 on November 21, 2018, 09:29:04 am

Title: Reverserver Proxy für Nextcloud mit Onlyoffice
Post by: shb256 on November 21, 2018, 09:29:04 am
Hallo,

ich möchte Nextcloud mit onlyoffice hinter opnsense betreiben.
Die grundsätzliche Einrichtung von nginx ist klar.

hier ist das beispiel von onlyoffice für einen reversen nginx proxy

Code: [Select]
#Use this example for the proxy document server running at 'backendserver-address'
# into the virtual directory 'documentserver-virtual-path'.

upstream docservice {
  server backendserver-address;
}

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

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host/documentserver-virtual-path;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


server {
  listen 0.0.0.0:80;
  listen [::]:80 default_server;
  server_tokens off;

  location /documentserver-virtual-path/ {
    proxy_pass http://docservice/;
    proxy_http_version 1.1;
  }
}
genauer geht es mir um diesen Abschnitt:
Quote
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host/documentserver-virtual-path;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

so sieht meine location section aus
Code: [Select]
    if ($scheme != "https") {
        return 302 https://$host$request_uri;
    }
    autoindex off;
    http2_push_preload off;
    proxy_set_header Host $host;
    proxy_set_header X-TLS-Cipher $ssl_cipher;
    proxy_set_header X-TLS-Protocol $ssl_protocol;
    proxy_set_header X-TLS-SNI-Host $ssl_server_name;
    # proxy headers for backend server
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://upstream50c9cb5f9daa4878ab3cf696f9e0416d;


damit sind meiner Meinung nach alle Punkte außer
Code: [Select]
proxy_set_header X-Forwarded-Host $the_host/documentserver-virtual-path;
mit abgebacken

Als Fehlermeldung erhalte ich im Browser

Quote
ERR_TOO_MANY_REDIRECTS

Was es bedeutet ist klar, allerdings ist mir nicht klar wie es lösen kann. Ich denke es liegt am Header für X-Forwarded-Host. Gibt es die Möglichkeit zusäzlicher header optionen hinzuzufügen

Danke
 shb
Title: Re: Reverserver Proxy für Nextcloud mit Onlyoffice
Post by: fabian on November 21, 2018, 05:35:11 pm
so sieht meine location section aus
Code: [Select]
    if ($scheme != "https") {
        return 302 https://$host$request_uri;
    }
    autoindex off;
    http2_push_preload off;
    proxy_set_header Host $host;
    proxy_set_header X-TLS-Cipher $ssl_cipher;
    proxy_set_header X-TLS-Protocol $ssl_protocol;
    proxy_set_header X-TLS-SNI-Host $ssl_server_name;
    # proxy headers for backend server
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://upstream50c9cb5f9daa4878ab3cf696f9e0416d;


Schaut schon mal ganz gut aus, wobei du für Connection und Upgrade noch das Websocket-Feature (Advanced Option) dazuschalten solltest:
https://github.com/ONLYOFFICE/document-server-proxy/blob/master/nginx/minimal.conf (https://github.com/ONLYOFFICE/document-server-proxy/blob/master/nginx/minimal.conf)


damit sind meiner Meinung nach alle Punkte außer
Code: [Select]
proxy_set_header X-Forwarded-Host $the_host/documentserver-virtual-path;
mit abgebacken

Den solltest du auch nicht brauchen, da beim nginx-Plugin der originale "Host"-Header erhalten bleibt. Das ist eher ein Problem wenn der Proxy den Header ändern würde.

Als Fehlermeldung erhalte ich im Browser

Quote
ERR_TOO_MANY_REDIRECTS

Browser wird im Kreis geschickt.Würde hier mal curl zum testen nehmen (-I) und auch mal den Request anschauen, der beim Server ankommt. Ggf. fehlt irgendwas oder der Server will irgendeine spezielle Umleitung (HTTP <-> HTTPS o. Ä.)

Was es bedeutet ist klar, allerdings ist mir nicht klar wie es lösen kann. Ich denke es liegt am Header für X-Forwarded-Host. Gibt es die Möglichkeit zusäzlicher header optionen hinzuzufügen

Danke
 shb
Derzeit nicht, notfalls musst du die Datei location.conf patchen. Die Zusatzheader waren bis vor kurzem nicht möglich (und sind es immer noch nicht), weil der Core die Funktionalität nicht bietet, Key-Value-Daten zu verwalten. Den notwendingen Pull-Request habe ich schon gemacht, aber es ist noch nicht klar, ob die Änderung im nächsten Update kommen wird - daher wird vermutlich auch nginx 1.4, welches diese Features nutzt, ein devel-only release.
Title: Re: Reverserver Proxy für Nextcloud mit Onlyoffice
Post by: shb256 on November 22, 2018, 09:35:25 am
Danke für die Unterstützung.

CURL -I hat 302 angezeigt. ich habe jetzt einfach nochmal den docker container gelöscht und den nginx neu eingerichtet.

Jetzt läuft es.

shb
Title: Re: Reverserver Proxy für Nextcloud mit Onlyoffice
Post by: fabian on November 22, 2018, 05:51:09 pm
Also in dem Fall ein Fehler beim Einrichten des Containers?
Falls es wen interessiert, währe es dennoch nützlich, wenn du den Fehler noch dazu schreibst.
Title: Re: Reverserver Proxy für Nextcloud mit Onlyoffice
Post by: shb256 on November 22, 2018, 08:47:44 pm
Also wo genau der Fehler lag kann ich leider nicht genau sagen.
Alles einfach nochmal gelöscht
Onlyoffice starte ich mit
Code: [Select]
docker run -i -t -d -p 8181:80 --restart=always onlyoffice/documentserverOpnsense habe ich nach dem online howto eingerichtet
https://wiki.opnsense.org/manual/how-tos/nginx.html (https://wiki.opnsense.org/manual/how-tos/nginx.html)
PLUS wie bereits beschrieben in locations in "advanced mode" aktivieren und am Ende den "WebSocket" aktivieren

und bei HTTP Server "https only". Das Zertifikat kommt ganznormal vom Let's Encrypt

Wenn noch Fragen sind, einfach hier nochmal schreiben

shb