Como crear un servidor web con Apache (Linux)
Todos hemos pensado alguna vez en publicar una página que hemos creado, o al menos por eso estás aquí. Hoy voy a enseñarte cómo crear un servidor para publicar nuestras páginas web.
Estamos usando Ubuntu server 18.04, en una máquina virtual, aunque en una máquina real sería el mismo proceso. Estamos trabajando como root, así que todos los comandos irán sin sudo, si no lo hacéis como root, tendréis que añadirle sudo a los comandos.
Vamos a comenzar instalando Apache2 en nuestro equipo introduciendo la siguiente línea:
- apt-get install apache2
Ahora que ya lo tenemos, su carpeta de configuración, donde estarán todos los archivos que tenemos que configurar para que todo esto funcione, están en /etc/apache2.
Vamos a describir las carpetas que vamos a tocar para configurar nuestro servidor
- sites-available: aquí tendremos los archivos de configuración específicos para cada página web que sirvamos. En esta carpeta los configuramos, pero tendremos que activarlos en la siguiente carpeta, sino, no funcionarán.
- sites-enabled: en esta carpeta aparecen las páginas web que servimos. Aparecen como enlaces a los archivos de la carpeta anterior. Si los archivos no aparecen aquí, significa que no servimos las páginas configuradas. para activarlas, escribimos a2ensite [ruta/nombreDelFicheroSinextensión].
- mods-available: Aquí aparecen los archivos que añaden modificaciones a nuestro servidor, por ejemplo ssl añade la modificación de añadir un certificado a nuestras páginas. Lo mismo que antes, si aparecen aquí, pero no en la siguiente carpeta, no estarán activados.
- mods-enabled: Son las modificaciones que están activadas. Para activarlas escribimos a2enmod [ruta/nombreDelFicheroSinextensión].
- Las demás carpetas no las utilizaremos para crear el servidor, pero no quiere decir que no sean importantes.
Ahora que ya sabemos para qué sirve cada carpeta, vamos a acceder a sites-available para crear nuestro primer archivo de configuración para la página. Dentro hay dos archivos, vamos a editar el archivo 000-default.conf usando nano para ver su estructura:
Vemos que la estructura es similar a la de un documento XML.
- *:80: el asterisco indica que página saldrá por todas las interfaces de red por el puerto 80. Si queremos que salga solo por una interfaz, ponemos la ip de red, por ejemplo para una red local pondríamos 192.168.1.0:80. Si queremos cambiar de puerto, es recomendable escoger uno superior al 49152. Si queremos ofrecer una página por https, escogemos el puerto 443.
- ServerName: Es el nombre con el que se accederá a nuestra página web, por defecto está comentado, ya que esta página es la que se ofrece por defecto.
- ServerAdmin: Indica el correo electrónico del administrador. Si ocurre algún problema al ofrecer la página, aparecerá este correo como contacto
- DocumentRoot: indica la ruta donde se encontrará el archivo .html.
- ErrorLog/CustomLog: Indican el archivo donde se almacenarán los errores que ocurran en el servidor.
Estas son las directivas que aparecen en el archivo por defecto, pero hay más.
- DirectoryIndex: indica el nombre de los archivos .html que hay en la ruta especificada. Por defecto si no ponemos esta directiva, va a seleccionar el arhivo llamado index.html. Si nuestro fichero no se llama así, tendremos que especificarlo con esta estructura:
- DirectoryIndex archivo1.html, archivo2.html, ...
- Alias: Especifica una carpeta virtual, que es una carpeta en la que se encuentra otra página, por ejemplo https://es.wikipedia.org/wiki/. La carpeta virtual que creemos, no debe ser una subcarpeta de la que hemos especificado en el DocumentRoot. Su estructura es:
- Alias /carpetaVirtual NombreDeLaCarpetaReal
- Directory: Indica directivas específicas para la carpeta que definamos. Su estructura es:
Directivas
</Directory>
</Directory>
- Sus directivas son:
- Options:
- -Indexes: Indica que no se mostrará el examen de directorios si no se encuentra el recurso especificado por el cliente. Si ponemos esta directiva, en el cliente nos aparecerá así:

- Indexes: Indica que se mostrará el examen de directorios (por defecto). Si ponemos esta directiva, en el cliente aparecerá el contenido de la carpeta de DocumentRoot.
- AllowOverride:
- All: Indica que la configuración de las directivas de Directory estarán especificadas en el archivo .htaccess del DocumentRoot. Este archivo no aparece por defecto, así que tendremos que crearlo.
- None: Indica que las directivas estarán especificadas en la sección Directory de este archivo de configuración (por defecto).
- AuthConfig: Nos indica que en el archivo .htaccess aparecen las directivas que permiten el acceso a los usuarios especificados. Este punto lo veremos más adelante
Ahora que ya conocemos las directivas, vamos a crear nuestro archivo para la primera página:
En primer lugar creamos el archivo. Podemos hacerlo desde cero, o copiar uno que ya esté hecho y modificarlo, yo voy a crearlo desde 0.
En primer lugar vamos a crear un html en la ruta que queramos. Para tenerlo más ordenado, he hecho una carpeta en /var/www que se llama pagina1. Dentro he creado un archivo html básico. Lo hemos llamado index.html para no tener que poner un nombre específico en la configuración.
Ahora vamos a crear el archivo de configuración en /etc/apache2/sites-available con nano pagina1.conf. Yo lo voy a llamar pagina1, pero podéis llamarlo como queráis. Eso sí, necesita tener la extensión .conf.
Vamos a escribir lo justo para que funcione:
- Interfaz y puerto ( *:80 ).
- Un nombre de la página (pagina1.tip5d3informatica.com).
- Ruta del html (/var/www/pagina1).
Ya lo tendríamos todo listo. Guardamos con Ctrl+O y salimos con Ctrl+X. Ahora vamos a activar el sitio para que funcione: a2ensite pagina1.conf en mi caso. Ahora vamos a reiniciar el servicio de Apache para aplicar los cambios. Lo hacemos con service apache2 restart. Ya lo tenemos todo listo en el servidor!!!!
Ahora para ver la página en el cliente, si tenemos un servidor DNS, lo configuramos para acceder a la página (En otra entrada te enseño o enseñaré próximamente a crearlo): el nombre es el ServerName, la ip es la del servidor y el puerto es el 80 en este caso. Si no tenemos un servidor DNS, en el cliente vamos a configurar su fichero hosts que se encuentra en C:\Windows\System32\drivers\etc. Para ello abrimos el bloc de notas como administrador y escribimos lo siguiente abajo del todo: IP Espacio/Tabulación Nombre completo de la página
Guardamos y ahora sí, ya podemos acceder a nuestra página:
Autenticación de usuarios:
Vamos a crear una norma en nuestra página para que solo se pueda acceder con usuarios determinados. Para ello vamos a modificar la página creada anteriormente. Anteriormente, explicamos que AllowOverride AuthConfig especificaba unas directivas para que ciertos usuarios puedan acceder o no. Lo escribimos dentro de Directory, aunque todo lo que hagamos podemos ponerlo en la sección Directory y quitando AllowOverride en vez de en el .htaccess.
Vamos a crear el fichero que contendrá la lista de usuarios y contraseñas. para ello escribimos htpasswd -c /ArchivoDeUsuarios nombrePrimerUsuario
- Nos pedirá una contraseña que tenemos que repetir
- Con -c creamos el archivo, así que si queremos crear otro usuario, escribiríamos el mismo comando pero sin -c.
Ahora vamos a crear el archivo .htaccess en la ruta especificada en Directory. Para ello escribimos nano .htaccess. Vamos a describir las directivas que podemos especificar aquí:
- AuthName: Texto entre comillas que aparecerá en la ventana donde se introduce usuario y contraseña (No suele funcionar)
- AuthType: Método de autenticación, normalmente suele ser Basic
- Require: usuarios que pueden acceder:
- valid-user: todos los usuarios
- user nombreUsuario: usuario especificado
- AuthUserFile: Fichero donde se encuentra la lista de usuarios.
Con las directivas escritas, el fichero o la sección Directory nos quedaría así:
Guardamos el archivo y reiniciamos el servicio con service apache2 restart.
Ahora desde el cliente comprobamos que funciona.
Restricción por IP:
Puede que no queramos que cierta ip acceda a nuestra página. Para ello, en la sección Directory vamos a especificar lo siguiente:
- Deny from:
- dirección ip: Especificamos una ip que no queremos que acceda.
- all: ninguna ip podrá acceder
- Allow From:
- dirección ip: Especificamos una ip que queremos que acceda.
- all: todas las direcciones ip podrán acceder (por defecto).
En nuestro fichero de configuración aparecerá así:
Aquí especificamos que solo pueda acceder la dirección 192.158.1.110, que no es la de mi cliente para comprobar que funciona (La autenticación está comentada, pero pueden funcionar los dos a la vez). Guardamos y reiniciamos el servicio con service apache2 restart
Ahora comprobamos que no podemos acceder.












Comentarios
Publicar un comentario