Búsqueda de sitios web

Cómo configurar un servidor Apache independiente con alojamiento virtual basado en nombres con certificado SSL - Parte 4


Un LFCE (abreviatura de Ingeniero Certificado de la Fundación Linux) es un profesional capacitado que tiene la experiencia para instalar, administrar y solucionar problemas de servicios de red en sistemas Linux, y está a cargo de el diseño, implementación y mantenimiento continuo de la arquitectura del sistema.

En este artículo, le mostraremos cómo configurar Apache para servir contenido web y cómo configurar hosts virtuales basados en nombres y SSL, incluido un certificado autofirmado.

Presentamos el Programa de Certificación de la Fundación Linux (LFCE).

Nota: Que este artículo no pretende ser una guía completa sobre Apache, sino más bien un punto de partida para el autoestudio sobre este tema para la LFCE examen. Por esa razón, tampoco cubriremos el equilibrio de carga con Apache en este tutorial.

Es posible que ya conozca otras formas de realizar las mismas tareas, lo cual está OK considerando que la Certificación de la Fundación Linux se basa estrictamente en el rendimiento. Por lo tanto, siempre que "haga el trabajo", tendrá buenas posibilidades de aprobar el examen.

Requisitos

Consulte la Parte 1 de la serie actual (“Instalación de servicios de red y configuración del inicio automático al arrancar”) para obtener instrucciones sobre cómo instalar e iniciar Apache.

A estas alturas, debería tener el servidor web Apache instalado y ejecutándose. Puedes verificar esto con el siguiente comando.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Nota: El comando anterior comprueba la presencia de apache o httpd (los nombres más comunes para el demonio web) entre la lista de procesos en ejecución. Si Apache se está ejecutando, obtendrá un resultado similar al siguiente.

El método definitivo para probar la instalación de Apache y comprobar si se está ejecutando es iniciar un navegador web y apuntar a la IP del servidor. Deberíamos aparecer la siguiente pantalla o al menos un mensaje confirmando que Apache está funcionando.

Configurando Apache

El archivo de configuración principal de Apache se puede ubicar en diferentes directorios dependiendo de su distribución.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Afortunadamente para nosotros, las directivas de configuración están muy bien documentadas en el sitio web del proyecto Apache. A algunos de ellos nos referiremos a lo largo de este artículo.

Servir páginas en un servidor independiente con Apache

El uso más básico de Apache es servir páginas web en un servidor independiente donde aún no se han configurado hosts virtuales. La directiva DocumentRoot especifica el directorio desde el cual Apache servirá los documentos de las páginas web.

Tenga en cuenta que, de forma predeterminada, todas las solicitudes se toman de este directorio, pero también puede utilizar enlaces simbólicos y/o alias para señalar otras ubicaciones.

A menos que coincida con la directiva Alias (que permite que los documentos se almacenen en el sistema de archivos local en lugar de en el directorio especificado por DocumentRoot), el servidor agrega la ruta de la URL solicitada. a la raíz del documento para crear la ruta al documento.

Por ejemplo, dado el siguiente DocumentRoot:

Cuando el navegador web apunte a [IP del servidor o nombre de host]/lfce/tecmint.html, el servidor se abrirá /var/ www/html/lfce/tecmint.html (suponiendo que dicho archivo exista) y guarde el evento en su registro de acceso con una respuesta 200 (OK).

El registro de acceso normalmente se encuentra dentro de /var/log bajo un nombre representativo, como access.log o access_log. Incluso puede encontrar este registro (y también el registro de errores) dentro de un subdirectorio (por ejemplo, /var/log/httpd en CentOS). De lo contrario, el evento fallido aún se registrará en el registro de acceso pero con una respuesta 404 (No encontrado).

Además, los eventos fallidos se registrarán en el registro de errores:

El formato del registro de acceso se puede personalizar según sus necesidades utilizando la directiva LogFormat en el archivo de configuración principal, mientras que no puede hacer lo mismo con el registro de errores. .

El formato predeterminado del registro de acceso es el siguiente:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Donde cada una de las letras precedidas por un signo de porcentaje indica que el servidor registrará cierta información:

String

Descripción

 %h

 Nombre de host remoto o dirección IP

 %l

 Nombre de registro remoto

 %u

 Usuario remoto si la solicitud está autenticada

 %t

 Fecha y hora en que se recibió la solicitud

 %r

 Primera línea de solicitud al servidor

 %>s

 Estado final de la solicitud

 %b

 Tamaño de la respuesta [bytes]

y apodo es un alias opcional que se puede usar para personalizar otros registros sin tener que ingresar toda la cadena de configuración nuevamente.

Puede consultar la directiva LogFormat [sección Formatos de registro personalizados] en los documentos de Apache para obtener más opciones.

Ambos archivos de registro (acceso y error) representan un gran recurso para analizar rápidamente de un vistazo lo que está sucediendo en el servidor Apache. No hace falta decir que son la primera herramienta que utiliza un administrador del sistema para solucionar problemas.

Finalmente, otra directiva importante es Escuchar, que le dice al servidor que acepte solicitudes entrantes en el puerto o combinación de dirección/puerto especificado:

Si solo se define un número de puerto, Apache escuchará el puerto dado en todas las interfaces de red (el signo comodín * se usa para indicar "todas las interfaces de red").

Si se especifican tanto la dirección IP como el puerto, entonces Apache escuchará en la combinación de puerto e interfaz de red determinados.

Tenga en cuenta (como verá en los ejemplos siguientes) que se pueden utilizar varias directivas Listen al mismo tiempo para especificar varias direcciones y puertos para escuchar. Esta opción indica al servidor que responda a las solicitudes de cualquiera de las direcciones y puertos enumerados.

Configuración de hosts virtuales basados en nombres

El concepto de host virtual define un sitio (o dominio) individual que es atendido por la misma máquina física. En realidad, se pueden servir varios sitios/dominios desde un único servidor “real” como host virtual. Este proceso es transparente para el usuario final, para quien parece que los diferentes sitios están siendo atendidos por distintos servidores web.

El alojamiento virtual basado en nombres permite que el servidor confíe en que el cliente informe el nombre del host como parte de los encabezados HTTP. Por lo tanto, al utilizar esta técnica, muchos hosts diferentes pueden compartir la misma dirección IP.

Cada host virtual se configura en un directorio dentro de DocumentRoot. Para nuestro caso, usaremos los siguientes dominios ficticios para la configuración de prueba, cada uno ubicado en el directorio correspondiente:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Para que las páginas se muestren correctamente, cambiaremos el directorio de cada VirtualHost a 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

A continuación, cree un archivo index.html de muestra dentro de cada directorio public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Finalmente, en CentOS y openSUSE agregue la siguiente sección en la parte inferior de /etc/httpd/conf/httpd.conf o / etc/apache2/httpd.conf, respectivamente, o simplemente modifíquelo si ya está allí.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Tenga en cuenta que también puede agregar cada definición de host virtual en archivos separados dentro del directorio /etc/httpd/conf.d. Si decide hacerlo, cada archivo de configuración debe tener el siguiente nombre:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

En otras palabras, debe agregar .conf al sitio o nombre de dominio.

En Ubuntu, cada archivo de configuración individual se denomina /etc/apache2/sites-available/[nombre del sitio].conf. Luego, cada sitio se habilita o deshabilita con los comandos a2ensite o a2dissite, respectivamente, de la siguiente manera.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Los comandos a2ensite y a2dissite crean enlaces al archivo de configuración del host virtual y los colocan (o eliminan) en el directorio /etc/apache2/sites-enabled directorio.

Para poder navegar a ambos sitios desde otra máquina Linux, deberá agregar las siguientes líneas en el archivo /etc/hosts de esa máquina para redirigir las solicitudes a esos dominios a una IP específica. DIRECCIÓN.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Como medida de seguridad, SELinux no permitirá que Apache escriba registros en un directorio que no sea el predeterminado /var/log/httpd.

Puede desactivar SELinux o establecer el contexto de seguridad correcto:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

donde xxxxxx es el directorio dentro de /var/www/html donde ha definido sus hosts virtuales.

Después de reiniciar Apache, debería ver la siguiente página en las direcciones anteriores:

Instalación y configuración de SSL con Apache

Finalmente, crearemos e instalaremos un certificado autofirmado para usarlo con Apache. Este tipo de configuración es aceptable en entornos pequeños, como una LAN privada.

Sin embargo, si su servidor expondrá contenido al mundo exterior a través de Internet, deberá instalar un certificado firmado por un tercero para corroborar su autenticidad. De cualquier manera, un certificado le permitirá cifrar la información que se transmite hacia, desde o dentro de su sitio.

En CentOS y openSUSE, necesita instalar el paquete mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Mientras que en Ubuntu tendrás que habilitar el módulo SSL para Apache.

a2enmod ssl

Los siguientes pasos se explican usando un servidor de prueba CentOS, pero su configuración debería ser casi idéntica en las otras distribuciones (si tiene algún tipo de problema, no dude en dejar sus preguntas usando los comentarios). forma).

Paso 1 [Opcional]: cree un directorio para almacenar sus certificados.

mkdir /etc/httpd/ssl-certs

Paso 2: Genera tu certificado autofirmado y la clave que lo protegerá.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Una breve explicación de las opciones enumeradas anteriormente:

  1. req -X509 indica que estamos creando un certificado x509.
  2. -nodes (NO DES) significa "no cifrar la clave".
  3. -days 365 es el número de días durante los cuales el certificado será válido.
  4. -newkey rsa:2048 crea una clave RSA de 2048 bits.
  5. -keyout /etc/httpd/ssl-certs/apache.key es la ruta absoluta de la clave RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt es la ruta absoluta del certificado.

Paso 3: abra el archivo de configuración del host virtual elegido (o su sección correspondiente en /etc/httpd/conf/httpd.conf como se explicó anteriormente) y agregue las siguientes líneas a una declaración de host virtual escuchando en el puerto 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Tenga en cuenta que necesita agregar.

NameVirtualHost *:443

en la parte superior, justo debajo

NameVirtualHost *:80

Ambas directivas indican a Apache que escuche en los puertos 443 y 80 de todas las interfaces de red.

El siguiente ejemplo está tomado de /etc/httpd/conf/httpd.conf:

Luego reinicie Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

Y apunte su navegador a https://www.ilovelinux.com. Se le presentará la siguiente pantalla.

Continúe y haga clic en “Entiendo los riesgos” y “Agregar excepción”.

Finalmente, marque "Almacenar permanentemente esta excepción" y haga clic en "Confirmar excepción de seguridad".

Y serás redirigido a tu página de inicio usando https.

Resumen

En esta publicación hemos mostrado cómo configurar el hosting virtual Apache y basado en nombres con SSL para asegurar la transmisión de datos. Si por alguna razón tuvo algún problema, no dude en hacérnoslo saber mediante el formulario de comentarios a continuación. Estaremos más que encantados de ayudarle a realizar una configuración exitosa.

Leer también

  1. Alojamiento virtual Apache basado en IP y basado en nombres
  2. Creación de hosts virtuales Apache con opciones de habilitar/deshabilitar Vhosts
  3. Supervise el “Servidor web Apache” utilizando la herramienta “Apache GUI”