Instalando y configurando collabora online detrás de Reverse proxy de apache sin docker

Hola. Tengo un problema de configuración que no soy capaz de resolver. He estado consultando por internet, en estes foros de nexcloud, en la documentación y no soy capaz de resolverlo.
Voy a intentar explicar pormenorizadamente la estructura y los probelmas que tengo.

Actualmente tengo dos servidores en la red local, uno con ubuntu 18.04 (servidor A), con la IP 192.168.0.150 con un Nextcloud y un proxy inverso de apache. Este proxy inverso está funcionando correctamente y redireccionando a otros servicios que tengo en mi red local (por ejemplo un Jellyfin).

En otro servidor (servidor B), con debian 10 y la IP 192.168.0.100, tengo instalado el collabora online, siguiendo las indicaciones de su pagina oficial

Tengo un domínio para el servidor B de collabora, subdominio.dominio.com.

En el reverse proxy configuré un sitio collabora.conf con el contenido:

<VirtualHost *:80>
       
       ServerName subdominio.dominio.com
       ServerAlias www.subdominio.dominio.com 
       Options -Indexes

       # Deben permitirse las barras codificadas
       AllowEncodedSlashes NoDecode
       # keep the host
       ProxyPreserveHost on
    
       ProxyPass / http://192.168.0.100:9980/
       ProxyPassReverse / http://192.168.0.100:9980/

       #static html, js, images, etc. serverd from loolwsd
       #loleaflet is the client part of collabora online
       ProxyPass /loleaflet http://192.168.0.100:9980/loleaflet retry=0
       ProxyPassReverse /loleaflet http://192.168.0.100:9980/loleaflet

       # WOPI discovery URL
       ProxyPass           /hosting/discovery http://192.168.0.100:9980/hosting/discovery retry=0
       ProxyPassReverse    /hosting/discovery http://192.168.0.100:9980/hosting/discovery

       # Capabilities
       ProxyPass           /hosting/capabilities http://192.168.0.100:9980/hosting/capabilities retry=0
       ProxyPassReverse    /hosting/capabilities http://192.168.0.100:9980/hosting/capabilities

       # Main websocket
       ProxyPassMatch "/lool/(.*)/ws$" ws://192.168.0.100:9980/lool/$1/ws nocanon

       # Admin Console websocket
       ProxyPass   /lool/adminws ws://192.168.0.100:9980/lool/adminws

       # Download as, Fullscreen presentation and Image upload operations
       ProxyPass           /lool http://192.168.0.100:9980/lool
       ProxyPassReverse    /lool http://192.168.0.100:9980/lool

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.subdominio.dominio.com [OR]
RewriteCond %{SERVER_NAME} =subdominio.dominio.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Siguiendo también las indicaciones de la documentación (https://www.collaboraoffice.com/code/apache-reverse-proxy/), concretamente el apartado 3.

En el servidor B, en el archivo de configuración /etc/loolwsd/loolwsd.xml, puse a false, en la línea 93 (enable) y la 94 (termination), en el apartado de SSL.
También puse el nombre del domínio en la línea 12, en server_name

Después, en el servidor A, instalé, por medio de certbot, un certificado de lets encrypt, para el sitio subdominio.dominio.com, que me generó el archivo de configuración para https, con el contenido:

<IfModule mod_ssl.c>
<VirtualHost *:443>
   
   ServerName doc.farinha.cat
   ServerAlias www.doc.farinha.cat 
   Options -Indexes

   # Deben permitirse las barras codificadas
   AllowEncodedSlashes NoDecode
   # keep the host
   ProxyPreserveHost on

   ProxyPass / http://192.168.0.100:9980/
   ProxyPassReverse / http://192.168.0.100:9980/

   #static html, js, images, etc. serverd from loolwsd
   #loleaflet is the client part of collabora online
   ProxyPass /loleaflet http://192.168.0.100:9980/loleaflet retry=0
   ProxyPassReverse /loleaflet http://192.168.0.100:9980/loleaflet

   # WOPI discovery URL
   ProxyPass           /hosting/discovery http://192.168.0.100:9980/hosting/discovery retry=0
   ProxyPassReverse    /hosting/discovery http://192.168.0.100:9980/hosting/discovery

   # Capabilities
   ProxyPass           /hosting/capabilities http://192.168.0.100:9980/hosting/capabilities retry=0
   ProxyPassReverse    /hosting/capabilities http://192.168.0.100:9980/hosting/capabilities

   # Main websocket
   ProxyPassMatch "/lool/(.*)/ws$" ws://192.168.0.100:9980/lool/$1/ws nocanon

   # Admin Console websocket
   ProxyPass   /lool/adminws ws://192.168.0.100:9980/lool/adminws

   # Download as, Fullscreen presentation and Image upload operations
   ProxyPass           /lool http://192.168.0.100:9980/lool
   ProxyPassReverse    /lool http://192.168.0.100:9980/lool


Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/doc.farinha.cat/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/doc.farinha.cat/privkey.pem
</VirtualHost>
</IfModule>

Con esta configuración, si en un navegador pongo el domínio o la IP:PUERTO me sale una página que únicamente pone OK.

Si accedo al IP:PUERTO/hosting/discovery o dominio/hosting/discovery me sale una página con el contenido de un xml:

    <wopi-discovery>
       <net-zone name="external-http">
           <app name="image/svg+xml">
               <action ext="svg" name="view" urlsrc="http://dominio/loleaflet/48938d4/loleaflet.html?"/>
           </app>
           <app name="application/vnd.ms-powerpoint"></app>
   ...
   ...
 
       </net-zone>
   </wopi-discovery>"

Si accedo a una de esas direcciones del archivo anterior (http://dominio/loleaflet/48938d4/loleaflet.html?) me sale una página con lo siguiente

Si accedo con la 192.168.0.100:9980/loleaflet/48938d4/loleaflet.html? me sale

Después, en el nextcloud, al configurar el plugin de collabora me sale al darle a Apply “Saved with error: Collabora Online should use the same protocol as the server instalation”

No se muy bien por donde tirar, por lo que veo, soy capaz de acceder al servidor Collabora, tanto desde la red local como desde fuera, pero supongo que tengo mal configurado el archivo loolwsd.xml.

Si alguien me puede ayudar os lo agradecería mucho.

moved to spanish subcategory as this is an englishspeaking forum.
though we are offering other languages in subcategories… like dutch, russian, french, german and … spanish.

Ok, thanK you, excuse me!

1 Like

thats no problem… so no real reason for an excuse… :wink:

1 Like

I think you should change http to https and in your ProxyPass and ProxyPassReverse and ws to wss in ProxyPassMatch and ProxyPass. And restart your Apache server.

Hi. Thanks for the answer, if I configure the proxy like this, I cannot access the Collabora server. I suppose it is because I do not have a certificate installed on the Collabora server. I installed the certificate in the proxy through certbot.
Would it be better to install the certificate on the Collabora server?
I will continue testing to see if I can get it to work.

Hola. Gracias por la respuesta, si configuro así el proxy no consigo acceder al servidor de Collabora. Supongo que es porque en el servidor de Collabora no tengo instalado ningún certificado. El certificado lo instalé en el proxy por medio de certbot.
¿Será mejor instalar el certificado en el servidor de Collabora?
Seguiré haciendo pruebas a ver si consigo hacer que ande.

Buenas!
Si no ando muy desencaminado, deberias de tener en el servidor del collabora instalados unos certificados. Esos mismo certificados, deberias de copiarlos al servidor de Nextcloud y usarlos en la configuracion del proxy, para poder acceder al servidor. En el collabora.conf, creo que deberia de estar:

SSLEngine on
SSLCertificateFile /carpeta/del/certificado-firmado-collabora
SSLCertificateChainFile  /carpeta/del/certificado-intermedio-collabora
SSLCertificateKeyFile /carpeta/de/clave-privada-collabora
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on

Yo creo que esa parte deberia de estar, porque si no, no le veo mucho sentido configurar un acceso a una https (en el servidor A) si no usas certificados para la seguridad. A ver si alguien nos lo aclara.

Un saludo :wink:

As is said in “el plugin de collabora”:Collabora Online should use the same protocol as the server instalation.
Your server installation uses ssl, so your collabora installation shoud use it too.
For Collabora it is sufficient to use a “self signed"certificate”:
openssl genrsa -out /etc/loolwsd/root.key.pem 2048
openssl req -x509 -new -nodes -key /etc/loolwsd/root.key.pem -days 9131 -out /etc/loolwsd/ca-chain.cert.pem -subj “/C=DE/ST=BW/L=Stuttgart/O=Dummy Authority/CN=Dummy Authority”
openssl genrsa -out /etc/loolwsd/key.pem 2048 -key /etc/loolwsd/key.pem
openssl req -key /etc/loolwsd/key.pem -new -sha256 -out /etc/loolwsd/localhost.csr.pem -subj “/C=DE/ST=BW/L=Stuttgart/O=Dummy Authority/CN=localhost”
openssl x509 -req -in /etc/loolwsd/localhost.csr.pem -CA /etc/loolwsd/ca-chain.cert.pem -CAkey /etc/loolwsd/root.key.pem -CAcreateserial -out /etc/loolwsd/cert.pem -days 9131

You have to include those files in your /etc/loolwsd.xml:



<cert_file_path desc=“Path to the cert file” relative=“false”>/etc/loolwsd/cert.pem</cert_file_path>
<key_file_path desc=“Path to the key file” relative=“false”>/etc/loolwsd/key.pem</key_file_path>
<ca_file_path desc=“Path to the ca file” relative=“false”>/etc/loolwsd/ca-chain.cert.pem</ca_file_path>
<cipher_list desc=“List of OpenSSL ciphers to accept. If empty the defaults are used. These can be overriden only if absolutely needed.”></cipher_list>

And you have to do the changes I mentioned above.