Configurazione WordPress con proxy Apache

Mi rendo conto che la configurazione in oggetto è particolare indicata a chi amministra server web.

Può capitare che date configurazione non possano convivere sulla stessa macchina ma si vuole utilizzare un unico indirizzo pubblico. La soluzione più elegante può essere quella di utilizzare il modulo proxy del web server Apache 2.4. Però una volta configurati i server il sito non è raggiungibile da internet: Google Chrome restituisce un errore “la pagina è stata reindirizzata troppe volte”, Internet Explorer e altri browser pagina bianca dopo diversi secondi di attesa.

Esaminando il log di apache configurato come proxy la pagina richiesta genera questa riga:

[29/Nov/2016:10:20:22 +0100] "GET / HTTP/1.1" 301 347   "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"

Quando normalmente dovrebbe essere:

[29/Nov/2016:10:20:58 +0100] "GET / HTTP/1.1" 200 21011 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"

Il codice HTTP 301 restituito per segnalare un reindirizzamento rappresenta il nocciolo della questione raggiungibilità.

Diagramma

Questo è il diagramma di rete. In altre configurazioni router e firewall potrebbero coincidere con lo stesso dispositivo.

diagramma

Configurazione

La configurazione tipica dovrebbe essere composta da:

  • accesso ad internet
  • firewall (IP address 192.168.1.1) configurato per il NAT indirizzo pubblico <–> privato della porta TCP 80. Nelle configurazioni più semplici potrebbe coincidere con il router. il NAT deve inoltrare le connessioni della porta TCP 80 all’indirizzo del server Apache con mod_proxy con indirizzo 192.168.1.10 descritto qui sotto
  • il server Apache con mod_proxy e virtual host (assumiamo che abbia indirizzo IP 192.168.1.10). Io ho utilizzato Ubuntu server e per comodità utilizzerò i comandi di questa distribuzione: con qualche accorgimento queste indicazioni valgono anche per tutte le altre distribuzioni.
  • uno o più server web (in questo caso con WordPress con indirizzo IP 192.168.1.20, 192.168.1.21, ecc)
  • Registrazione del dominio presso un provider DNS con risoluzione (statica o dinamica) all’indirizzo del proprio router. Per la registrazione del dominio dinamico si può usare no-ip che è gratuito. Assumiamo per esempio di aver registrato prova.ddns.net

Occorre verificare che WordPress funzioni nella rete interna. Nel menù impostazioni / generali queste due impostazioni vanno configurate così:

Indirizzo WordPress (URL): http://prova.ddns.net

Indirizzo sito (URL): http://prova.ddns.net

Salvare tutto: a questo punto il sito potrebbe creare problemi a causa del rewrite dell’URL.

Lavorare con il file hosts

Per risolvere occorre aggirare il problema utilizzando il file host presente sul PC da cui stiamo configurando.

  • In windows occorre aprire blocco note come amministratore e aggiungere nel file c:windowssystem32driveretchosts
  • in Linux e MacOs occorre editare il file /etc/hosts con privilegi di amministratore

Aggiungere la seguente riga:

192.168.1.20  prova.ddns.net

salvare. Per controllare è sufficiente un PING all’indirizzo prova.ddns.net se risolve con 192.168.1.20 è corretto altrimenti occorre controllare di non aver commesso errori nella modifica del file hosts.

A questo punto WordPress è raggiungibile anche dal proprio browser (ho notato che Microsoft Edge ignora il file host e tenta la risoluzione attraverso il DNS, vi consiglio in questa fase di utilizzate il classico Internet Explorer 11 o Firefox o Google Chrome).

Configurazione del modulo proxy di Apache – server 192.168.1.10

Sul server 192.168.1.10 va attivato il modulo proxy con il comando

sudo a2enmod proxy

poi occorre creare il file /etc/apache/site-avaible/prova.ddns.net.conf

<VirtualHost *:80>

 ServerAdmin [email protected]
 serverName prova.ddns.net

 ProxyPreserveHost On
 ProxyRequests Off

<Location "/">
  ProxyPass http://192.168.1.20/
  ProxyPassReverse http://prova.ddns.net/
</Location>


<IfModule log_config_module>
  TransferLog /var/log/apache2/prova.ddns.net_access.log
  ErrorLog /var/log/apache2/prova.ddns.net_error.log
</IfModule>

</VirtualHost>

Poi abilitiamo la configurazione e riavviamo il servizio con i comandi

sudo a2ensite prova.ddns.net
sudo service apache2 restart

Consiglio di cancellare la cache del browser e fare qualche tentativo.