GNU/Linux >> Tutoriales Linux >  >> Linux

Configurar hosts virtuales Apache en el sistema operativo Ubuntu

Ahora que Apache está instalado y ejecutándose, puede configurarlo para servir a múltiples dominios usando hosts virtuales .

Crea el diseño

Este ejemplo utiliza dos dominios:dominio1.com y dominio2.com.

  1. En su directorio de inicio, cree una carpeta public_html:

    cd ~
    mkdir public_html
    
  2. Para cada dominio que desee alojar, cree una carpeta con un conjunto estándar de subcarpetas. Los siguientes comandos crean las carpetas public, private, log, cgi-bin y backup para dominio1.com y dominio2.com:

    mkdir -p public_html/domain1.com/{public,private,log,cgi-bin,backup}
    mkdir -p public_html/domain2.com/{public,private,log,cgi-bin,backup}
    

Crear índice.html

El contenido de la carpeta pública depende de usted, pero este ejemplo usa un archivo HTML muy simple para que pueda verificar el trabajo del servidor virtual.

  1. Para cada dominio, cree un archivo index.html:

    nano public_html/domain1.com/public/index.html
    
  2. Agregue el siguiente código al archivo index.html:

    <html>
      <head>
        <title>domain1.com</title>
      </head>
      <body>
    
        <h1>domain1.com</h1>
      </body>
    </html>
    
  3. Repita el proceso para que tenga un archivo similar para dominio2.com. Reemplace todas las instancias de domain1.com con domain2.com .

Definir hosts virtuales

Ahora que tiene una estructura básica para sus dos dominios, puede definir dos hosts virtuales.

Revisar NameVirtualHost

Con los hosts virtuales, la configuración de NameVirtualHost a menudo genera confusión.

Cada interfaz y puerto en el que Apache está configurado para escuchar necesita una directiva NameVirtualHost. Puede definir la directiva solo una vez por puerto.

En el diseño de Apache para el sistema operativo Ubuntu, hay una directiva NameVirtualHost predeterminada en ports.conf archivo.

Ejecute el siguiente comando para ver el contenido de ports.conf :

cat /etc/apache2/ports.conf

Debería obtener el siguiente resultado (a menos que haya modificado el archivo previamente):

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

La configuración predeterminada de NameVirtualHost satisface los requisitos en este momento:Apache aplicará la configuración y la lógica de host virtual basadas en nombres para las solicitudes HTTP realizadas en cualquier interfaz disponible (*) en el puerto 80.

Nota :La ubicación de la directiva NameVirtualHost predeterminada en 'ports.conf' es nueva en el diseño de Apache del sistema operativo Ubuntu; las versiones anteriores colocaron una configuración similar en el host virtual predeterminado.

Definir hosts virtuales personalizados

Ahora está listo para agregar sus propios hosts virtuales para que pueda comenzar a servir sus dominios.

Cree el archivo vhost para el dominio1:

sudo nano /etc/apache2/sites-available/domain1.com.conf

El contenido es el siguiente:

# Place any notes or comments you have here
# It will make any customisation easier to understand in the weeks to come

# domain: domain1.com
# public: /home/demo/public_html/domain1.com/

<VirtualHost *:80>

  # Admin email, Server Name (domain name) and any aliases
  ServerAdmin [email protected]
  ServerName  domain1.com
  ServerAlias www.domain1.com


  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html
  DocumentRoot /home/demo/public_html/domain1.com/public


  # Custom log file locations
  LogLevel warn
  ErrorLog /var/log/apache2/error-mydomainname.com.log
  CustomLog /var/log/apache2/access-mydomainname.com.log combined

</VirtualHost>

Habilitar el sitio

Habilite el sitio de la siguiente manera:

sudo a2ensite domain1.com

La salida del comando es la siguiente:

Site domain1.com installed; run /etc/init.d/apache2 reload to enable.

Ejecute el comando recomendado:

sudo /etc/init.d/apache2 reload

Para probar el dominio sin crear una zona DNS y registros en algunos servidores de nombres de Internet, puede modificar el archivo '/etc/hosts' en su computadora local para incluir algunas entradas que asignen 'dominio1.com', 'dominio2.com' y el resto a la dirección IP pública del servidor en la nube de demostración:

127.0.0.1    localhost
...

# entries related to the demo Cloud Server
123.45.67.890   domain1.com
123.45.67.890   www.domain1.com
123.45.67.890   domain2.com
...

La ubicación del archivo 'hosts' varía según el sistema operativo que esté cargado en su computadora local.

Nota :Las entradas en el archivo 'hosts' deben eliminarse antes de probar y usar zonas DNS en vivo y registros creados en servidores de nombres de Internet. Si no los elimina, puede generar confusión de su parte y pruebas inexactas de registros DNS públicos nuevos o modificados.

Con dichos cambios realizados con fines de prueba, puede navegar a su sitio en un navegador web en su computadora local y se muestra el contenido del archivo public/index.html.

Usar ServerAlias

Tenga en cuenta que en el archivo vhost, establece un ServerAlias. Si tiene el DNS configurado correctamente, también puede usar esa dirección.

Hablaremos de forzar una dirección u otra en un artículo posterior sobre las reglas de reescritura.

Repetir el proceso para el otro dominio

Para crear y habilitar dominio2.com, repita el proceso de la siguiente manera:

  1. Cree el archivo vhost:

    sudo nano /etc/apache2/sites-available/domain2.com
    ...
    # Enter the details for domain2.com as per the example shown above
    
  2. Habilite el sitio y reinicie Apache:

    sudo a2ensite domain2.com
    ...
    sudo /etc/init.d/apache2 reload
    
  3. Navegue al segundo dominio:

    https://domain2.com
    or
    https://www.domain2.com
    

Debería ver el archivo de índice 'domain2.com'.

Ver archivos de registro

Como se define en el archivo vhosts, cada dominio tiene sus propios archivos de registro.

Enumere los registros de sus dominios:

ls /var/log/apache2/error-mydomainname.com.log

El resultado es exactamente como se esperaba:

access.log  error.log

Archivo vhost predeterminado

Aunque cambió el host virtual predeterminado, lo dejó en su lugar.

Si alguien ingresa la dirección IP del servidor en la nube, recibe el contenido de ese archivo de host virtual predeterminado (si no configuró un host virtual separado para la dirección IP).

¿Por qué se sirven desde ese archivo vhost?

Apache busca los archivos vhost habilitados en orden alfabético y, si no puede encontrar uno para la dirección IP o el nombre de dominio solicitado, sirve el primero (alfabéticamente).

Si hubiera deshabilitado o eliminado el archivo vhost predeterminado, se mostraría el contenido de dominio1.com (estando antes de dominio2.com alfabéticamente).

Esto es algo a tener en cuenta al planificar sus sitios web. ¿Quiere que un dominio en particular sea el predeterminado? ¿Quiere que la dirección IP tenga un contenido completamente diferente?

Establecer la dirección de correo electrónico del administrador

Configure la dirección de correo electrónico del administrador del servidor. Esta dirección se utiliza si configura el servidor para que se comunique con usted cuando se produzcan errores. También se muestra en ServerSignature si su valor se establece en Correo electrónico. (Consulte la sección Definir pies de página de Apache .

ServerAdmin [email protected]

Establecer el nombre de dominio

Establezca el nombre de dominio (ServerName) para el host virtual. Puede tener tantos alias (ServerAlias) como sea necesario. Por ejemplo, puede hacer que dominio.com y dominio.net apunten al mismo contenido.

ServerName domain.com
ServerAlias www.domain.com

Nota :Esta no es una regla de reescritura, pero los dominios definidos aquí servirán el mismo contenido (suponiendo que haya configurado el DNS para que apunte a la IP de su servidor en la nube).

Definir el archivo de índice

Defina el archivo de índice (la página de inicio que se muestra cuando se ingresa la dirección del dominio). Esto es útil si desea que el usuario sea dirigido a una página alternativa o a una página de inicio no estándar.

DirectoryIndex index.html

Nota :Este no es un buen método para redirigir a los usuarios porque pueden ir directamente a una página no especificada, como dominio.com/index.php, mientras que el valor DirectoryIndex solo funciona para aquellos que ingresan a dominio.com.

Definir la ruta de los documentos

Defina la ubicación de los archivos públicos del dominio. Utilice una ruta de acceso absoluta.

DocumentRoot /home/demo/public_html/domain.com/public

Establecer los archivos de registro

Establezca los niveles de registro y la ubicación de los archivos de registro de los hosts virtuales.

LogLevel warn
ErrorLog  /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined

Definir documentos de error

Configure el ErrorDocument, que se utiliza para todos los mensajes de error estándar.

ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html

En este ejemplo, hay una carpeta de "errores" en el directorio público. Cada documento de error se creó y se colocó en la carpeta de errores. Las rutas que se muestran son relativas a la carpeta DocumentRoot definida anteriormente.

Si los mensajes de error no están definidos, Apache genera sus propias páginas de error. Las páginas de error personalizadas son más fáciles de usar y se pueden personalizar tanto como desee.

Definir pies de página de Apache

Defina ServerSignature para especificar si los detalles del servidor se muestran en las páginas de error generadas por el servidor o en las listas de índices. Las opciones son Activado, Desactivado y Correo electrónico.

ServerSignature On

El nivel de detalle de la firma se configura a través de ServerTokens, que no se pueden configurar en el archivo de hosts virtuales. Para el diseño de Apache del sistema operativo Ubuntu, esto está configurado correctamente en '/etc/apache2/conf.d/security'. Consulte el artículo Configuración de Apache n.º 2 NECESITA ENLACE para obtener más detalles.

Si ServerSignature está configurado en Correo electrónico , se mostrará el correo electrónico de ServerAdmin.

Habilitar cgi-bin

Habilite la ubicación cgi-bin según lo definido por el diseño de host virtual personalizado. Puede dejar cgi-bin en la ubicación DocumentRoot si lo desea.

ScriptAlias /cgi-bin/ /home/demo/public_html/domain.com/cgi-bin/
<Location /cgi-bin>
  Options +ExecCGI
</Location>

Establecer opciones de directorio

Establezca las opciones para el directorio especificado. El siguiente ejemplo habilita la opción FollowSymLinks para el directorio público de dominio.com.

  Options FollowSymLinks

Las siguientes son otras opciones que puede configurar:

Opción de navegación de directorio

Para desactivar la exploración de directorios, use -Indexes. Para activar la exploración de directorios, utilice +Índices.

Options -Indexes

Opción SSI

Habilite o deshabilite las inclusiones del lado del servidor. El siguiente ejemplo lo deshabilita.

Options -Includes

Habilite o deshabilite la opción para seguir enlaces simbólicos. Tenga cuidado con esta opción porque puede generar riesgos de seguridad (vinculación inadvertida a carpetas de configuración).

Options -FollowSymLinks

Puede considerar usar la directiva SymLinksIfOwnerMatch en lugar deFollowSymLinks. La directiva SymLinksIfOwnerMatch permite que se sigan enlaces simbólicos solo si el propietario del enlace es idéntico al propietario del archivo o directorio de destino (en términos de propiedad/permisos del sistema de archivos de Linux). Esto evita muchos de los riesgos de seguridad que puede crear una simple directiva FollowSymlinks.

opción .htaccess

Establezca AllowOverride en Ninguno para deshabilitar la compatibilidad con .htaccess. Establézcalo en Todo para permitir el soporte.

AllowOverride None

También puede especificar qué características de .htaccess habilitar, como:

AllowOverride AuthConfig Indexes

Los documentos ApachehtaccessandAllowOverride tienen más información sobre las diferentes características.

Recuerde proteger específicamente su archivo .htaccess. Puede hacer esto renombrándolo a algo oscuro y denegando el acceso al archivo desde fuentes externas:

AccessFileName .myobscurefilename
<Files ~ "^\.my">
    <SatisfyAll>
    Require all denied
    </SatisfyAll>
</Files>

Nota :El ejemplo anterior está formateado para Apache 2.4. Si usa 2.2, reemplace ** Requerir todos los denegados ** con Pedir Permitir,Denegar | Negar de todos | Satisfacer a todos .

Sin opciones

Especifique Ninguno para desactivar todas las opciones disponibles.

Options None

Jerarquía de opciones

Las directivas de opciones se pueden establecer por directorio, como se muestra en el siguiente ejemplo:

  AllowOverride None
  Options None

AllowOverride All

La configuración del primer directorio desactivaría todas las opciones y deshabilitaría la compatibilidad con.htaccess para todos los directorios.

Sin embargo, la configuración del segundo directorio anularía la primera y permitiría la compatibilidad con.htaccess para el directorio domain.com/public.

Resumen

El archivo de hosts virtuales es una herramienta fácil de usar pero muy poderosa. Le recomendamos que ingrese una configuración y luego la pruebe. Luego ingrese la siguiente configuración y prueba, y así sucesivamente.

Una vez que se familiarice con él, verá que tiene un buen control sobre todas sus carpetas y archivos web.


Linux
  1. Cómo configurar servidores virtuales Apache en CentOS

  2. Cambiar el puerto SSH en el sistema operativo Linux Ubuntu

  3. Configurar Apache en el sistema operativo Ubuntu

  4. Configurar el servidor MySQL en el sistema operativo Ubuntu

  5. Crear hosts virtuales CentOS NGINX

Cómo configurar servidores virtuales Apache en CentOS 8

Cómo configurar servidores virtuales Apache en Ubuntu 18.10

Cómo instalar el servidor Apache y configurar hosts virtuales en Ubuntu 22.04

Cómo configurar servidores virtuales de Apache en Debian 11

Cómo configurar servidores virtuales Apache en Ubuntu 18.04

Cómo configurar servidores virtuales Apache en Ubuntu 20.04