Logo coa pluma do proxecto Apache HTTP

Crear Host virtual con php en Apache httpd nun Archlinux

Neste post farei funcionar un Host virtual apache en Archlinux, o cal será para uso local e estará alonxado nun directorio local para realizalas nosas probas con él.

Instalación

Hai que instalalo apache:
# pacman -S apache

Configuración

Por defecto o demo httpd non se habilitará en arch, esto se pode facer con:
# systemctl enable httpd && systemctl start httpd

Cómo queremos un servidor para probas evitaremonos perder recursos e tempo habilitándolo.

Para o seu uso mellor usaremos “start” en lugar de habilitalo para sempre:
# systemctl start httpd

Con isto xa teriamos o demo httpd executándose e servindo os arquivos aloxados en “/srv/http/” que sería o directorio por defecto do apache en Archlinux.

Os arquivos de configuración pódense atopar en:
/etc/httpd/conf/
O arquivo de configuración base é:
/etc/httpd/conf/httpd.conf
Se queremos que só sirva peticións ao noso equipo modificamos o parámetro “Listen 80” e lle poñemos:
# ...
Listen 127.0.0.1:80
# ...

Creando un host virtual

Para comezar hai que crealo directorio que conterá os arquivos de configuración dos vhost, que será “disabled” e outro que conterá os enlaces simbólicos a estos arquivos que será “enabled”.

Os dóus directorios irán en:
/etc/httpd/conf/vhosts/

O bó de facelo cun directorio enabled e outro disabled, é que non se perderán as configuracións cada vez que queiramos deshabilitar un host, posto que só teriamos que eliminar o enlace simbólico, conservando o arquivo de configuración por se o precisamos nun futuro.

Así é cómo se crean os directorios necesarios:
# mkdir -pv /etc/httpd/conf/vhosts/enabled/ /etc/httpd/conf/vhosts/disabled/
mkdir: created directory "/etc/httpd/conf/vhosts"
mkdir: created directory "/etc/httpd/conf/vhosts/enabled/"
mkdir: created directory "/etc/httpd/conf/vhosts/disabled/"
Agora hai que incluila directiva “Include” a /etc/httpd/conf/httpd.conf:
# ...
###### Incluindo arquivos de configuración de hosts virtuais #####
Include conf/vhosts/enabled/*.conf
##################################################################
# ...

Con este asterisco indícolle que inclua tódolos arquivos nese directorio, se vos fixades as rutas son relativas a raíz do servidor definida na directiva “ServerRoot”.

Creando o arquivo da configuración do vhost

Agora temos que facer un arquivo de configuración exclusivo do novo vhost.

Para elo o creamos en /etc/httpd/conf/vhosts/disabled/:
# vi /etc/httpd/conf/vhosts/disabled/host_probas1.conf
E darlle o seguinte contido:
<VirtualHost 127.0.0.1:80>
    ServerAdmin probas
    DocumentRoot <directorio_raiz_do_vhost> #(podemos poñer /srv/http/<NOME_DOMINIO> )
    ServerName <nome_dominio>
    ServerAlias *.<nome_dominio>
    <Directory "<directorio_raiz_do_vhost>">
        AllowOverride All     # Con "All" permite que apache cargue configuracións dos .htaccess, con "none" o impide.
        Require all granted
    </Directory>
</VirtualHost>

Deberemos asignalos permisos de lectura e execución ao directorio raíd do vhost ao usuario ou grupo “http”, ten que ter acceso de lectura e execución en tódolos directorios que compoñen a ruta a raíz do vhost, ou non podrá acceder a él e nos devolverá o erro 403.

O máis “recomendable” sería crear un enlace simbólico en /srv/http/ ao directorio onde teñámola raíz da nosa web, a ruta ao directorio /srv/http xa ven con permisos “rx” para outros, por iso “deixa pasar” a apache httpd ata o enlace.

Creámolo directorio onde queiramos:
# mkdir -vp /<RUTA>/<A>/<RAIZ>/<VHOST>/<RAIZ_VHOST>/
Enlazamos este directorio no directorio /srv/http:
# ln -sv  /<RUTA>/<A>/<RAIZ>/<VHOST>/<RAIZ_VHOST>/ /srv/http/<NOME_DOMINIO>

Ollo, lembrate de que o enlace sexa un arquivo non un directorio ( vamos que ao final de “<NOME_DOMINIO>” non poñamos “/” ).

# setfacl --test -Rm u:http:rx  /srv/http/<NOME_DOMINIO>

Hai que poñela R antes da m, se pon para aplicar os permisos recursivamente polo cal é algo opcional e redundante se o directorio está valeiro.

O “-test” serve para ver que permisos quedarían, se estamos conformes coa saida que amosa, volvémolo a executar sen o “-test”.

Hai que ter en conta, que se non damos permisos de acceso ao directorio orixinal, Apache devolverá o erro 403 por que non podrá acceder ao directorio orixinal ao que apunta o enlace.

Entón o que podemos facer é asignarlle os permisos rx a tódolos directorios anteriores ao directorio raíz da web:
# setfacl -m u:http:rx /<ruta>/<ao>/<directorio>/<raiz>/<da>/<web>

Ir eliminando da ruta os subdirectorios para aplicarlle os permisos aos directorios superiores.

Redirixindo as consultas ao servidor local

Cómo é un servidor de probas para uso local, en lugar depoñernos a configurar DNS, etc…

Editamos /etc/hosts e engadimolas seguintes liñas:
# ...
### LOCAIS
127.0.0.1       <nome>.<dominio>             <nome_host>
127.0.0.1       www.<nome>.<dominio>         <nome_host>
# ...

O de poñelo nome de host é opcional, máis sirve como medida de seguridade para saber de que equipo se espera a información.

Instalando PHP

Cómo xa temos montado o noso servidor, seguramente nos interese utilizar php.

Para instalar php en Archlinux:
# pacman -S php
Engadir a /etc/http/conf/httpd.conf a siguiente liña:
Include conf/extra/php5_module.conf
Logo configuralo editando o php.ini:
# vi /etc/php/php.ini
Para axustala zona horaria que reflexará o servidor, mudamos o seguinte parámetro:
date.timezone = Europe/Madrid

Para poder usar php nas nosas webs, se pode seguir as instruccións da Archwiki Apache_HTTP_Server#Extensions”, onde nos recomendan usar o módulo mod_mpm_prefork.

Tamén hai que engadir na definición dos hosts virtuáis a seguinte directiva para poder executalos php incrustados nos arquivos .html ou .htmd:
# ...
 <Directory "/srv/http/<nome_vhost>/">
    #...
    AddType application/x-httpd-php .html .htm
    #...
  </Directory>
# ...

Con isto xa teríamos o noso Apache funcionando con un vhost configurado capaz de executar scripts php, tanto dende arquivos .php como incrustado en arquivos .html e .htm.

Info de interés

Para consultalos logs de apache baixo systemd, podemos usar:
# journalctl -u httpd.service