Después de publicar tutoriales de instalación de Apache y de NGINX mostraré cómo configurar nuestro servidor web para diferentes propósitos comenzando por Apache (el próximo artículo será sobre NGINX)
Configuración de host virtual
En caso de haber configurado Apache con let’s encrypt siguiendo el tutorial antes mencionado tendremos un archivo de configuración en “/etc/apache2/sites-enabled” y otro con el mismo nombre más el sufijo “le-ssl”. En mi caso son
/etc/apache2/sites-enabled/frank.asgardius.company.conf
/etc/apache2/sites-enabled/frank.asgardius.company-le-ssl.conf
En mi caso el primer archivo de configuración tiene el siguiente contenido
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName frank.asgardius.company
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =frank.asgardius.company
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
La primera línea indica que el sitio web estará disponible desde todas las interfaces de red del servidor a través del puerto 80. DocumentRoot indica el directorio raíz de nuestro sitio web, ServerName indica el nombre de host correspondiente a nuestro sitio web. La sección Directory indica una serie de políticas para el directorio indicado. AllowOverride indica si el archivo .htaccess puede omitir los ajustes globales del servidor para este sitio específico. La sección Rewrite sirve para redirigir las peticiones de una URL a otra (en este caso se redirigen las peticiones HTTP a la versión HTTPS del sitio) Requiere mod_rewrite para funcionar. Let’s encrypt agregará esta parte al archivo de configuración y habilitará el módulo requerido al solicitar un certificado en caso de que deseemos redirigir el tráfico http a https.
El mi caso segundo archivo contiene lo siguiente
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName frank.asgardius.company
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
SSLCertificateFile /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/frank.asgardius.company/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
La primera línea indica que el sitio web requiere el módulo mod_ssl para funcionar. En caso de no estar presente el resto del archivo de configuración se ignorará. La segunda línea indica que el sito web estará disponible desde todas las interfaces de red en el puerto 443. SSLCertificateFile indica la ruta absoluta del certificado de seguridad de este sitio web. SSLCertificateKeyFile indica la ruta del archivo llave requerido para hacer funcionar el certificado. La línea Include indica la ruta de un archivo de configuración con parámetros adicionales
Proxy inverso
La función de proxy inverso permite redirigir el tráfico de un servidor web a través de otro (Cloudflare se basa en ese principio)
Necesitamos los módulos mod_proxy y proxy_wstunnel, los cuales podemos habilitar de la siguiente forma
sudo a2enmod proxy proxy_http proxy_wstunnel
sudo systemctl restart apache2
Para redirigir el tráfico de una instancia de Icecast instalado en nuestro servidor web podemos agregar lo siguiente
ProxyPass "/" "http://127.0.0.1:8000/"
ProxyPassReverse "/" "http://127.0.0.1:8000/"
Podemos redirigir el tráfico de un directorio específico en su lugar
ProxyPass "/r3" "http://127.0.0.1:8000/r3"
ProxyPassReverse "/r3" "http://127.0.0.1:8000/r3"
También podemos bloquear la redirección hacia una ruta específica
ProxyPass "/admin" "!"
ProxyPass "/" "http://127.0.0.1:8000/"
ProxyPassReverse "/" "http://127.0.0.1:8000/"
En caso de que el sitio a redirigir utilice websocket debemos especificarlo
ProxyPass "/socket" "ws://127.0.0.1:8096/socket"
ProxyPassReverse "/socket" "ws://127.0.0.1:8096/socket"
En caso de que el sitio a redirigir utilice SSL debemos agregar el parámetro “SSLProxyEngine On” de la siguiente forma
SSLProxyEngine On
ProxyPass "/" "https://example.com/"
ProxyPassReverse "/" "https://example.com/"