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.

:%s/magari/quando ci proverò/g :D