Configuració del host virtual d’Apache (Wordpress)

De Wiki personal d'en Guillem Serrat
La revisió el 17:59, 27 gen 2026 per Guseba (discussió | contribucions)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

Passos previs

L’objectiu dels hosts virtuals és accedir directament al docker, sense necessitat d’especificar el nom genèric del VPS i el port del docker.

Per realitzar aquesta feina amb Apache requerim de la habilitació dels següents mòduls:

  • proxy
  • proxy_http
  • ssl

Tots tres es poden habilitar amb l’ordre sudo a2enmod <nomModul>

Configuració del host virtual

En el host virtual definirem el nom de domini wordpress.gserrat.cat i l’àlies www.wordpress.gserrat.cat.

En cas d’accedir al servidor amb algun d’aquests dos noms de domini, redirigirem a l’usuari a “http://127.0.0.1:8081”, és a dir, al localhost al port 8081, on s’està exportant el docker amb Wordpress.

La “/” indica que accedim a l’arrel del directori, és a dir, wordpress.gserrat.cat i no wordpress.gserrat.cat/altre.html. En cas de fer-ho, redirigirà igualment al localhost pel port 8081

Això ho realitzarem especificant la directiva ProxyPass, i mitjançant la directiva  ProxyPassReverse reescriu la capçalera de resposta i redireccionament per tal de que mostri el nom de domini.

<VirtualHost *:80>
    ServerName wordpress.gserrat.cat
    ServerAlias www.wordpress.gserrat.cat

    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:8081/
    ProxyPassReverse / http://127.0.0.1:8081/

    # Logs
    ErrorLog ${APACHE_LOG_DIR}/wiki-error.log
    CustomLog ${APACHE_LOG_DIR}/wiki-access.log combined
</VirtualHost>

Certificació SSL del host virtual

La certificació SSL ens permet encriptar el tràfic HTTP mitjançant HTTPS, fet imprescindible quan allotjem una pàgina web.

Primerament, haurem d’instal·lar les utilitats necessàries i preparar l’entorn:

  • Instal·lar certbot amb l’ordre sudo apt install certbot python3-certbot-apache -y, l’eina que permet emetre certificats gratuïts
  • Verificar que el domini ja està creat al DNS
  • Assegurar que el host virtual està activat (sudo a2ensite <hostVirtual>)

Per certificar els dos noms de domini executarem la següent ordre sudo certbot --apache -d wordpress.gserrat.cat -d www.wordpress.gserrat.cat

Un cop certificat ens generarà un nou host virtual que escoltarà pel port 443 d’Apache i on tindrà els mòduls de certificació en HTTPS.

És important modificar aquest host virtual i afegir la directiva RequestHeader set X-Forwarded-Proto “https”. Això és important un cop entenem el funcionament del proxy invers:

  1. Quan el client es comunica amb el servidor fa servir HTTPS
  2. El servidor rep la petició i actúa com a servidor intermediari
  3. El servidor es comunica amb el Docker, però ho fa amb HTTP
  4. El Docker respon la petició del servidor en HTTP
  5. El servidor repon al client amb la informació del Docker però en HTTPS

Això, en cas de Wordpress és un problema, ja que si comprova que accedim mitjançant una URL amb HTTPS però la comunicació realment és HTTP, no funcionarà correctament

Amb la directiva anteriorment esmentada, el servidor modifica la capçalera HTTP per “fer veure” que la petició és HTTPS, tot i no estar certificada, per tal de que Wordpress conclogui que la connexió és HTTPS

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName wordpress.gserrat.cat
    ServerAlias www.wordpress.gserrat.cat

    RequestHeader set X-Forwarded-Proto "https"
    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:8081/
    ProxyPassReverse / http://127.0.0.1:8081/

    # Logs
    ErrorLog ${APACHE_LOG_DIR}/wiki-error.log
    CustomLog ${APACHE_LOG_DIR}/wiki-access.log combined

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

Al host virtual sense certificat ens generarà unes directives de redirecció a HTTPS, així si un usuari entra per HTTP, el host virtual redireccionarà a HTTPS.

També és possible deshabilitar el lloc virtual per evitar connexions HTTP, però no és recomanable ja que a l’usuari li apareixerà com que el lloc web no és accessible. La millor pràctica és mantenir el lloc web HTTP actiu amb una redirecció a HTTPS.

Tot i això, el codi original es mantindrà dins del host virtual. És recomanable retirar tot el codi i deixar únicament la redirecció.

<VirtualHost *:80>
    ServerName wordpress.gserrat.cat
    ServerAlias www.wordpress.gserrat.cat

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =wordpress.gserrat.cat [OR]
    RewriteCond %{SERVER_NAME} =www.wordpress.gserrat.cat
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    # Logs
    ErrorLog ${APACHE_LOG_DIR}/wiki-error.log
    CustomLog ${APACHE_LOG_DIR}/wiki-access.log combined
</VirtualHost>