¿Cómo crear subdominios en un host virtual basado en nombres?

27

Tengo alojamiento basado en nombres, vamos a llamarlo my.address.com. Mi amigo tiene la dirección 'simple' address.comy me dio una máquina virtual a la que puedo acceder a través de SSH.

También hizo algo de magia con los puertos y ahora, después de instalar Apache, pude acceder a /var/wwwtravés my.address.com.

Entonces, la pregunta es, ¿cómo puedo hacer un subdominio como test.my.address.com?

Debería haber algo de magia con la Directiva de escucha de Apache , pero no puedo entenderlo. Además, sé cómo crear sitios disponibles localmente con Apache, pero no es lo mismo.

scythargon
fuente
No necesitará Listen, mire los hosts virtuales de Apaches: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler
la pregunta principal se mantiene: ¿qué escribir en la directiva ServerName?
scythargon

Respuestas:

33

Para poder crear subdominios, deberá asegurarse de varias cosas:

DNS

Para que otros puedan acceder test.my.address.com, primero deben poder resolver ese nombre en la dirección IP de su máquina virtual. ¿Cómo se puede hacer eso?

Lo que probablemente tu amigo ya hizo fue crear un registro A en la address.comzona, que apunta mya la dirección IP de tu VM.

Hasta aquí todo bien. ¿Pero que pasa test.my? Puede que todavía no tenga una entrada.

Su amigo también podría simplemente agregar *.mya la zona (y señalarla a la misma dirección IP). Luego, todas las solicitudes something.my.address.comse enviarán a su VM. ¡Excelente!

Hosts virtuales Apache

Una vez que se puede llegar a su VM, Apache tiene que saber cómo manejar la solicitud. Aquí es donde usamos la función Hosts virtuales del servidor Apache HTTP.

Normalmente ejecuto Debian, así que explicaré esto con un ejemplo de configuración /etc/apache2/sites-available. Llamemos un archivo test.my.address.comy llénelo con información.

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>

La configuración clave dentro de este archivo es la ServerNamedirectiva . Esto le dice a Apache con qué nombre debe estar disponible este servidor . Se pueden dar nombres adicionales con la directiva ServerAlias .

En caso de que también esté usando Debian, no olvide sudo a2ensite test.my.address.comdespués de crear el archivo y sudo invoke-rc.d apache2 restart.

Der Hochstapler
fuente
¡Muchas gracias! :) Hice mi parte y escribí un correo electrónico a un amigo sobre su parte. Gracias de nuevo :)
scythargon
@scythargon: Un placer. Estamos aquí para ayudar :)
Der Hochstapler
Si bien mi amigo no respondió a mi, ¿puedes, por favor? Lo que pensé acerca de cómo funciona: http-request para test.my.address.comva my.address.comy luego mi servidor Apache en VM lo maneja. Pero usted dijo que el servidor DNS en address.com debería saber test.myantes de todo esto e independientemente del conocimiento my, ¿por qué?
scythargon
@scythargon: para que cualquier solicitud HTTP llegue a su servidor, cualquier cliente primero tiene que averiguar a qué servidor se debe enviar la solicitud. Entonces el nombre de host tiene que ser válido. De lo contrario, solo se les dirá "ese nombre no existe".
Der Hochstapler