{"id":184,"date":"2020-05-18T20:39:32","date_gmt":"2020-05-18T20:39:32","guid":{"rendered":"http:\/\/dsantana.uas.edu.mx\/?p=184"},"modified":"2025-09-23T19:06:01","modified_gmt":"2025-09-23T19:06:01","slug":"virtual-host","status":"publish","type":"post","link":"https:\/\/dsantana.uas.edu.mx\/index.php\/2020\/05\/18\/virtual-host\/","title":{"rendered":"Virtual Host"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\" id=\"prerequisitos\">Prerequisitos<\/h3>\n\n\n\n<p>Hay que asegurarnos de que contamos con lo siguiente para empezar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un\u00a0<em>dominio<\/em>\u00a0o\u00a0<em>direcci\u00f3n de nombre<\/em>\u00a0que apunte a la direcci\u00f3n IP de nuestro servidor. En \u00e9ste ejemplo usaremos\u00a0<code>ejemplo.com<\/code>\u00a0(recuerda sustituir\u00a0<code>ejemplo.com<\/code>\u00a0con el dominio o direcci\u00f3n de nombre con el que cuentes).<\/li>\n\n\n\n<li>Tener instalado Apache.<\/li>\n\n\n\n<li>Una cuenta con privilegios sudo<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-crear-la-estructura-de-directorios\">1: Crear la estructura de directorios<\/h3>\n\n\n\n<p>El directorio raiz (document root) de cada servidor virtual es el lugar en el que residen y se despachan los archivos de cada sitio web. Se puede establecer una estructura de directorios en el lugar que se desee, y \u00e9ste tutorial vamos a usar la siguiente estructura:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/var\/www\/\n\u251c\u2500\u2500 dominio1.com\n\u2502   \u2514\u2500\u2500 public_html\n\u251c\u2500\u2500 dominio2.com\n\u2502   \u2514\u2500\u2500 public_html\n\u251c\u2500\u2500 dominio3.com\n\u2502   \u2514\u2500\u2500 public_html<\/code><\/pre>\n\n\n\n<p>Cada dominio o direcci\u00f3n de nombre en nuestro servidor tendr\u00e1 su directorio ra\u00edz como&nbsp;<code>\/var\/www\/&lt;nombre_de_dominio&gt;\/public_html<\/code><\/p>\n\n\n\n<p>El directorio&nbsp;<code>\/var\/www<\/code>&nbsp;ya existe desde que est\u00e1 instalado Apache. Vamos a empezar por crear el directorio de nuestro primer servidor virtual,&nbsp;<code>ejemplo.com<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/var\/www\/ejemplo.com\/public_html<\/code><\/pre>\n\n\n\n<p><em>El comando&nbsp;<code>mkdir -p<\/code>&nbsp;crea los directorios necesarios, por lo que en un solo paso se crean&nbsp;<code>\/var\/www\/ejemplo.com<\/code>&nbsp;y&nbsp;&nbsp;<code>\/var\/www.ejemplo.com\/public_html<\/code><\/em><\/p>\n\n\n\n<p>Luego, crearemos un archivo&nbsp;<code>index.hml<\/code>&nbsp;en el directorio que acabamos de crear, por lo que primero nos cambiamos al directorio reci\u00e9n creado<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/var\/www\/ejemplo.com\/public_html<\/code><\/pre>\n\n\n\n<p>y ya estando ah\u00ed, abre tu editor favorito y escribe lo siguiente, guard\u00e1ndolo con el nombre&nbsp;<code>index.html<\/code>&nbsp;Linux no te dejar\u00e1 crear el archivo sin usar sudo, por lo que deber\u00e1s usarlo para abrir el editor ya que el directorio pertenece al usuario&nbsp;<code>root<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\"&gt;\n    &lt;title&gt;Bienvenido a ejemplo.com&lt;\/title&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;h1&gt;Muy bien!&lt;\/h1&gt;\n    &lt;p&gt;P\u00e1gina de ejemplo.com!&lt;\/p&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Apache corre usando al usuario&nbsp;<code>www-data<\/code>, por lo que para que los permisos sean los correctos, debemos cambiar al due\u00f1o tanto de los directorios como del archivo que acabamos de crear<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nsudo chown -R www-data: \/var\/www\/ejemplo.com<\/code><\/pre>\n\n\n\n<p><em>El comando&nbsp;<code>chown -R www-data:<\/code>&nbsp;cambia al due\u00f1o y al grupo&nbsp;<code>www-data<\/code>&nbsp;del directorio especificado y a todos los archivos y directorios que est\u00e1n debajo en un solo paso.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"creacion-de-los-servidores-virtuales\">Creaci\u00f3n de los servidores virtuales<\/h3>\n\n\n\n<p>En Debian, los archivos de configuraci\u00f3n de los servidores virtuales de Apache se encuentran en el directorio&nbsp;<code>\/etc\/apache2\/sites-available<\/code>&nbsp;y pueden habilitarse creando ligas simb\u00f3licas al directorio&nbsp;<code>\/etc\/apache2\/sites-enabled<\/code><\/p>\n\n\n\n<p>Nos cambiamos al directorio de configuraciones de servidores virtuales de apache<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/apache2\/sites-available<\/code><\/pre>\n\n\n\n<p>y estando ah\u00ed, sin olvidar utilizar sudo porque el due\u00f1o del directorio es&nbsp;<code>root<\/code>, escribimos lo siguiente y lo guardamos con el nombre de archivo&nbsp;<code>ejemplo.com.conf<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80>\n    ServerName ejemplo.com\n    ServerAlias www.ejemplo.com\n    ServerAdmin webmaster@ejemplo.com\n\n        DocumentRoot \/var\/www\/html\/ejemplo.com\/public_html\/\n            &lt;Directory \/>\n                        Options FollowSymLinks\n                        AllowOverride None\n            &lt;\/Directory>\n\n            &lt;Directory \/var\/www\/html\/ejemplo.com\/public_html\/>\n                Options Indexes FollowSymLinks MultiViews\n                AllowOverride All\n                Order allow,deny\n                allow from all\n            &lt;\/Directory>\n\n        ErrorLog ${APACHE_LOG_DIR}\/dsantana.uas.edu.mx.log\n        CustomLog ${APACHE_LOG_DIR}\/dsantana.uas.edu.mx-access.log combined\n\n \n    ErrorLog ${APACHE_LOG_DIR}\/ejemplo.com-error.log\n    CustomLog ${APACHE_LOG_DIR}\/ejemplo.com-access.log combined\n&lt;\/VirtualHost><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>VirtualHost<\/code>: La secci\u00f3n que define que se trata de un servidor virtual (virtual host), y que espera recibir conexiones en el puerto\u00a0<code>80<\/code>\u00a0(el puerto por default para\u00a0<code>HTTP<\/code>). Si lo notas, todo el archivo de configuraci\u00f3n del servidor virtual est\u00e1 dentro de \u00e9sta secci\u00f3n. Si hay varios archivos de configuraci\u00f3n, cada uno deber\u00e1 contener una secci\u00f3n\u00a0<code>VirtualHost<\/code>, y a su vez cada secci\u00f3n\u00a0<code>VirtualHost<\/code>\u00a0contiene varias\u00a0<em>directivas<\/em>\u00a0y sus par\u00e1metros para definir a cada servidor virtual.<\/li>\n\n\n\n<li><code>ServerName<\/code>: El nombre del servidor virtual. La direcci\u00f3n de nombre deber\u00e1 ser la misma que la que contiene \u00e9sta directiva,\u00a0<em>\u00f3 la de la siguiente directiva\u2026<\/em><\/li>\n\n\n\n<li><code>ServerAlias<\/code>: Un nombre alterno para el mismo servidor virtual. Si la direcci\u00f3n de nombre es igual que \u00e9ste par\u00e1metro, entonces tambi\u00e9n aplicar\u00e1n las definiciones para \u00e9ste servidor virtual.<\/li>\n\n\n\n<li><code>ServerAdmin<\/code>: La direcci\u00f3n de email del administrador del servidor virtual. Se mostrar\u00e1 cuando existan errores.<\/li>\n\n\n\n<li><code>DocumentRoot<\/code>: Directorio virtual donde est\u00e1n los archivos que se procesar\u00e1n y se mostrar\u00e1n en \u00e9ste servidor virtual.<\/li>\n\n\n\n<li><code>Directory<\/code>: La definici\u00f3n de un servidor virtual puede contener una o varias directivas Directory, donde se definen par\u00e1metros para tratar con diferentes directorios. Se comienza por definir los par\u00e1metros del directorio ra\u00edz del servidor virtual.\n<ul class=\"wp-block-list\">\n<li><code>Options<\/code>: Un par\u00e1metro de la directiva Directory en el cual se definen sus opciones.\n<ul class=\"wp-block-list\">\n<li><code>-Indexes<\/code>: Un signo de menos antes de Indexes define que no se muestren los contenidos del directorio cuando no contiene un archivo\u00a0<code>index.html<\/code>\u00a0o\u00a0<code>index.php<\/code>\u00a0(si est\u00e1 instalado PHP y definido\u00a0<code>index.php<\/code>\u00a0como archivo principal), etc.<\/li>\n\n\n\n<li><code>+FollowSymLinks<\/code>: Un signo de m\u00e1s antes de\u00a0<code>FollowSymLinks<\/code>\u00a0quiere decir que se sigan las ligas simb\u00f3licas si es que existen en el directorio.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>AllowOverride<\/code>: En \u00e9sta directiva se especifica que directivas se permite que se cambien si existiera un archivo aparte de nombre\u00a0<code>.htaccess<\/code>\n<ul class=\"wp-block-list\">\n<li><code>All<\/code>:\u00a0<code>All<\/code>\u00a0se refiere a todo, entonces \u00e9sta directiva indica que si existe un archivo .htaccess, entonces todas las directivas que cotenga pueden redefinir las directivas del directorio, aunque se definan diferente en los archivos de configuraci\u00f3n de Apache.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>ErrorLog<\/code>: La directiva define d\u00f3nde y que nombre tiene la bit\u00e1cora de errores (muy \u00fatil para diagnosticar lo que no funcione en el servidor virtual).<\/li>\n\n\n\n<li><code>CustomLog<\/code>: \u00c9sta directiva define d\u00f3nde y que nombre tiene la bit\u00e1cora de accesos al servidor virtual (\u00fatil para saber que se solicita al servidor virtual, c\u00f3mo se solicita, desde d\u00f3nde se solicita, etc.).<\/li>\n<\/ul>\n\n\n\n<p>Puedes nombrar al archivo de configuraci\u00f3n de un servidor virtual como tu quieras, pero se recomienda el dominio o direcci\u00f3n de nombre, para que sea m\u00e1s f\u00e1cil identificar a cada servidor virtual y cual es su prop\u00f3sito al mismo tiempo.<\/p>\n\n\n\n<p>Para habilitar el servidor virtual, es necesario crear una liga simb\u00f3lica del archivo de configuraci\u00f3n al directorio&nbsp;<code>\/etc\/apache2\/sites-enabled<\/code>&nbsp;y desde ah\u00ed lee Apache todos los sitios que est\u00e1n \u201chabilitados\u201d, posibilitando habilitar y deshabilitar servidores virtuales a discreci\u00f3n. Puedes crear la liga simb\u00f3lica como se muestra a continuaci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ln -s \/etc\/apache2\/sites-available\/ejemplo.com.conf \/etc\/apache2\/sites-enabled\/<\/code><\/pre>\n\n\n\n<p>O puedes usar el script que se instal\u00f3 cuando instalaste Apache, lo que se recomienda en lugar de crear la liga simb\u00f3lica a mano<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2ensite ejemplo.com<\/code><\/pre>\n\n\n\n<p>Una vez que est\u00e1 creado el archivo de configuraci\u00f3n del servidor virtual y habilitado, se procede a verificar que la configuraci\u00f3n no tenga errores<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apachectl configtest<\/code><\/pre>\n\n\n\n<p>Y si todo est\u00e1 correcto, aparecer\u00e1<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>Syntax OK<\/code><\/code><\/pre>\n\n\n\n<p>En caso de haber cometido alg\u00fan error, \u00e9ste se mostrar\u00e1 y se tendr\u00e1 que corregir el archivo de configuraci\u00f3n del servidor virtual.<\/p>\n\n\n\n<p>En caso de ser correcta la nueva configuraci\u00f3n, procedemos a decirle a Apache que vuelva a leer su configuraci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl reload apache2<\/code><\/pre>\n\n\n\n<p>Para verificar que el nuevo servidor virtual est\u00e1 funcionando adecuadamente, pasamos a escribir en un browser la direcci\u00f3n&nbsp;<code>http:\/\/ejemplo.com<\/code>&nbsp;y deber\u00e1 aparecer la p\u00e1gina web del archivo index.html que creamos en un paso anterior:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"muy-bien\">Muy bien!<\/h2>\n\n\n\n<p>P\u00e1gina de ejemplo.com!<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"server-configuration\">Configuraci\u00f3n del servidor<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/etc\/apache2<\/code>: El directorio de configuraci\u00f3n de Apache.\u00a0Todos los archivos de configuraci\u00f3n de Apache residen aqu\u00ed.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/apache2.conf<\/code>: El archivo de configuraci\u00f3n principal de Apache.\u00a0Esto se puede modificar para realizar cambios en la configuraci\u00f3n global de Apache.\u00a0Este archivo es responsable de cargar muchos de los otros archivos en el directorio de configuraci\u00f3n.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/ports.conf<\/code>: este archivo especifica los puertos en los que escuchar\u00e1 Apache.\u00a0De forma predeterminada, Apache escucha en el puerto 80 y, adem\u00e1s, escucha en el puerto 443 cuando se habilita un m\u00f3dulo que proporciona capacidades SSL.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/sites-available\/<\/code>: el directorio donde se pueden almacenar los hosts virtuales por sitio.\u00a0Apache no usar\u00e1 los archivos de configuraci\u00f3n que se encuentran en este directorio a menos que est\u00e9n vinculados al\u00a0<code>sites-enabled<\/code>directorio.\u00a0Por lo general, toda la configuraci\u00f3n del bloque del servidor se realiza en este directorio y luego se habilita vinculando al otro directorio con el\u00a0<code>a2ensite<\/code>comando.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/sites-enabled\/<\/code>: el directorio donde se almacenan los hosts virtuales habilitados por sitio.\u00a0Por lo general, estos se crean vinculando los archivos de configuraci\u00f3n que se encuentran en el\u00a0<code>sites-available<\/code>directorio con la extensi\u00f3n\u00a0<code>a2ensite<\/code>.\u00a0Apache lee los archivos de configuraci\u00f3n y los enlaces que se encuentran en este directorio cuando se inicia o recarga para compilar una configuraci\u00f3n completa.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/conf-available\/<\/code>,\u00a0<code>\/etc\/apache2\/conf-enabled\/<\/code>: estos directorios tienen la misma relaci\u00f3n que los directorios\u00a0<code>sites-available<\/code>y\u00a0<code>sites-enabled<\/code>, pero se utilizan para almacenar fragmentos de configuraci\u00f3n que no pertenecen a un host virtual.\u00a0Los archivos en el\u00a0<code>conf-available<\/code>directorio se pueden habilitar con el\u00a0<code>a2enconf<\/code>comando y deshabilitar con el\u00a0<code>a2disconf<\/code>comando.<\/li>\n\n\n\n<li><code>\/etc\/apache2\/mods-available\/<\/code>,\u00a0<code>\/etc\/apache2\/mods-enabled\/<\/code>: Estos directorios contienen los m\u00f3dulos disponibles y habilitados, respectivamente.\u00a0Los archivos que terminan en\u00a0<code>.load<\/code> contienen fragmentos para cargar m\u00f3dulos espec\u00edficos, mientras que los archivos que terminan en\u00a0<code>.conf<\/code>contienen la configuraci\u00f3n de esos m\u00f3dulos.\u00a0Los m\u00f3dulos se pueden habilitar y deshabilitar usando el\u00a0comando\u00a0<code>a2enmod<\/code>y .<code>a2dismod<\/code><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Videos<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"20210305 - Seguridad en Redes - Virtual Host\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/Psk7mJRnLhE?start=1954&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>El alojamiento compartido o alojamiento virtual, en ingl\u00e9s Virtual hosting, es una de las modalidades m\u00e1s utilizadas por las empresas dedicadas al negocio del alojamiento web. Dependiendo de los recursos disponibles, permite tener una cantidad variable de dominios y sitios web en una misma m\u00e1quina.1\u200b<\/p>\n<p>Es, generalmente, la forma m\u00e1s econ\u00f3mica de alojamiento web y ha supuesto una peque\u00f1a revoluci\u00f3n ya que sus reducidos costes (generalmente menos de 10\u20ac al mes) han hecho posible que muchos profesionales hayan podido llevar su actividad tambi\u00e9n al mundo en l\u00ednea.<\/p>\n","protected":false},"author":1,"featured_media":305,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,5,12,1,10,6],"tags":[50],"class_list":["post-184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-debian","category-docencia","category-linux","category-sin-categoria","category-sistemas-operativos","category-talleres","tag-virtual-host"],"_links":{"self":[{"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/posts\/184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":16,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":2306,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/posts\/184\/revisions\/2306"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/media\/305"}],"wp:attachment":[{"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dsantana.uas.edu.mx\/index.php\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}