Nota bene:

Tutte le configurazioni descritte in questo documento sono ora gestibili direttamente nel nuovo Server Manager, tramite le impostazioni del Web Server



L'interfaccia "Reverse Proxy"  (disponibile in Cockpit "Applicazioni" > "Web Server" > "Reverse proxy") di NethServer consente agevolmente di creare dei proxypass per richieste http/https sia per url che per dei nomi DNS.


Per maggiori dettagli fare riferimento al manuale di NethServer.



In alcuni casi potrebbe però essere necessario implementare manualmente il proxy pass, per farlo è necessario un file di configurazione aggiuntivo per httpd.


Supponendo ad esempio di voler creare un proxypass sia http che https verso il server con ip 192.168.10.100 per il nome demo.nethesis.it sarà necessario creare il file:

/etc/httpd/conf.d/zzz_myproxypass.conf


il cui contenuto dovrà essere:

<VirtualHost *:80>
    IncludeOptional conf.d/default-virtualhost.inc
</VirtualHost>

<VirtualHost *:80>
    ServerName demo.nethesis.it
    ProxyPreserveHost On
    ProxyPass / http://192.168.10.100/
    ProxyPassReverse / http://192.168.10.100/
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    ServerName demo.nethesis.it
    ProxyPreserveHost On
    ProxyPass / https://192.168.10.100/
    ProxyPassReverse / https://192.168.10.100/
</VirtualHost>


Se si utilizza il certificato Let's Encrypt è possibile pensare di utilizzarlo anche per il nome DNS usato nel proxy pass.
Per farlo sarà però necessario includere nella sezione http del file del proxy pass una esclusione per il percorso di validazione del certificato:

<VirtualHost *:80>
    IncludeOptional conf.d/default-virtualhost.inc
</VirtualHost>

<VirtualHost *:80>
    ServerName demo.nethesis.it
    ProxyPreserveHost On
    ProxyPassMatch ^/.well-known/acme-challenge/ !
    ProxyPass / http://192.168.10.100/
    ProxyPassReverse / http://192.168.10.100/
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    ServerName demo.nethesis.it
    ProxyPreserveHost On
    ProxyPassMatch ^/.well-known/acme-challenge/ !
    ProxyPass / https://192.168.10.100/
    ProxyPassReverse / https://192.168.10.100/
</VirtualHost>


In questo modo sarà possibile includere nella richiesta del certificato Let's Encrypt anche il nome "demo.nethesis.it".



Attenzione!

il certificato Let's Encrypt implementato in questa configurazione NON RISIEDE SULLA MACCHINA DESTINAZIONE, si trova sul sistema su cui si configura il proxy pass.

Da questo deriva il fatto che il sistema di destinazione non avrà effettivamente a bordo un certificato emesso da una CA ma continuerà ad utilizzare per i suoi servizi interni il certificato autofirmato presente di default su NethServer.

Questo aspetto può impattare sulla possibilità di utilizzare i servizi che richiedono l'uso di certificati validi, come l'app del CTI o la configurazione TLS di telefoni fisici remoti: queste configurazioni NON FUNZIONERANNO.



Nel caso fossero coinvolte anche delle websocket (come accade nel caso di Webtop, NethVoice e Mattermost), andranno aggiunte alcune ulteriori direttive:

<VirtualHost *:80>
    IncludeOptional conf.d/default-virtualhost.inc
</VirtualHost>

<VirtualHost *:80>
    ServerName demo.nethesis.it
    ProxyPreserveHost on
    ProxyPassMatch ^/.well-known/acme-challenge/ !
    ProxyPass / http://192.168.10.100/
    ProxyPassReverse / http://192.168.10.100/
</VirtualHost>

<VirtualHost *:443>
    RewriteEngine on
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule (.*) wss://192.168.10.100/%{REQUEST_URI} [P,L]
    
    SSLEngine on
    SSLProxyEngine on

    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    
    ServerName demo.nethesis.it
    ProxyPreserveHost on
    ProxyPassMatch ^/.well-known/acme-challenge/ !
    ProxyPass / https://192.168.10.100/
    ProxyPassReverse / https://192.168.10.100/
</VirtualHost>


NB: è importante rispettare l'ordine delle direttive, pena il fallimento nella generazione del certificato!


NB2: ricordarsi di includere il file zzz_myproxypass.conf nel backup della configurazione!