ISPConfig: snippet per reverse proxy con socket.io

Pubblicato il Pubblicato in #sysadmin

Qualche settimana fa stavo uscendo pazzo per un problema alla UI di una web app dietro reverse proxy, mi sono accorto che era un problema sul reverse proxy ispezionando la pagina con le WebTools di Chrome e notando che alcune richieste non andavano a buon fine: tutte quelle di socket.io.

ISPconfig -> Siti -> [vhost sito] -> Opzioni -> Direttive Apache

ProxyRequests Off
ProxyPreserveHost On
ProxyPass /.well-known/ !
ProxyPass /               http://10.8.10.11/
ProxyPassReverse /  http://10.8.10.11/

ProxyVia on      
RewriteEngine On

RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://10.8.10.11:8080/$1 [P,L]

ProxyPass               /socket.io http://10.8.10.11:8080/socket.io
ProxyPassReverse        /socket.io http://10.8.10.11/socket.io

Zimbra su Reverse Proxy (apache2)

Pubblicato il Pubblicato in #sysadmin

Visto che devo ancora mettere a punto l’installazione di Zimbra in chroot per ora vediamo come fare ad affacciare al pubblico un’installazione di Zimbra in una macchina interna alla lan tramite un reverse proxy apache2!

Ci sono due cose utili da sapere su Zimbra:

  • Il suo webserver non è configurato per servire virtualhosts: le richieste all’IP ed al nome di dominio/alias che vi punta vengono servite alla stessa maniera. Questo ci evita complicazioni con il reverse proxy.
  • Ha bisogno di tre percorsi per funzionare: /zimbra/, /service/, /home/. Quindi bisogna mettere anche quelli dietro il reverse proxy.

Tuttavia questi tre percorsi non si possono cambiare, questo vuol dire che con un reverse proxy semplice dovremo accontentarci di tenerci il percorso finale http://nomedominio.it/zimbra. Se cambiassimo /zimbra/ in /webmail/ (ad esempio) incorreremo in degli errori dopo il login perchè verremmo comunque rediretti ad un percorso su /zimbra/. Per ovviare a questo bisogna utilizzare il modulo proxy_html che fa anche un rewrite. E’ un pò più complesso e lo tratterò successivamente, magari.

La porzione di configurazione da inserire in apache (aggiungendola ad un virtualhost o in quella generale, a seconda delle esigenze) è questa, 10.0.0.2 è la macchina sulla quale gira Zimbra:

ProxyRequests Off

<Proxy *>
 Order deny,allow
 Allow from all
</Proxy>

<Location "/service">
 ProxyPass http://10.0.0.2/service
 ProxyPassReverse http://10.0.0.2/service
 ProxyPassReverse /
 #SetOutputFilter        proxy-html
 ProxyHTMLExtended      On
 ProxyHTMLURLMap /service /service
</Location>

<Location "/zimbra">
 ProxyPass http://10.0.0.2/zimbra
 ProxyPassReverse http://10.0.0.2/zimbra
 ProxyPassReverse /
 ProxyHTMLExtended      On
 #SetOutputFilter        proxy-html
 ProxyHTMLURLMap /zimbra /zimbra
</Location>

<Location "/home">
 ProxyPass http://10.0.0.2/home
 ProxyPassReverse http://10.0.0.2/home
 ProxyPassReverse /
 ProxyHTMLExtended      On
 #SetOutputFilter        proxy-html
 ProxyHTMLURLMap /zimbra /zimbra
</Location>

Personalmente, come spiegato nel mio precedente articolo, ho preferito mettere questa porzione di configurazione in /etc/apache2/conf.d/zimbra (con conf.d disattivato in apache2.conf) per poi includerla nella configurazione di un virtualhost, in maniera tale da poter rendere disponibile zimbra solo ai virtualhosts che desidero senza reincollare porzioni di configurazione ma solo inserendo una direttiva Include.

Praticamente:

<VirtualHost *:80>
 ServerAdmin webmaster@trinhackria.org
 ServerName trinhackria.org
 Include /etc/apache2/conf.d/zimbra

Ovviamente tutto questo non riguarda il pannello di amministratore di dominio. Visto che è in ascolto sulla porta 7071 ed usa SSL non si può mettere dietro reverse proxy alla stessa maniera detta sopra. E’ un po’ più complesso e tratterò anche questo argomento successivamente, magari.