El método de host virtuales a través de puertos sigue prácticamente los mismos pasos que el método anterior. Ahora hay que utilizar un puerto, en vez de una IP, para identificar los sitios web. El servidor tendrá una sola IP y cada sitio web se servirá a través de un puerto distinto, por lo que en la URL habrá que explicitar dicho puerto.
Las directivas <VirtualHost>, del ejemplo anterior, sufrirán los siguientes cambios:
# cat /etc/apache2/sites-available/www-asir-com.conf
<VirtualHost 172.16.100.1:80>
DocumentRoot /var/www/www-asir-com
ServerAdmin webmaster@asir.com
...
ErrorLog ${APACHE_LOG_DIR}/errores-www-asir-com.log
CustomLog ${APACHE_LOG_DIR}/accesos-www-asir-com.log combined
</VirtualHost>
# cat /etc/apache2/sites-available/www-daw-com.conf
<VirtualHost 172.16.100.1:8080>
DocumentRoot /var/www/www-daw-com
ServerAdmin webmaster@daw.com
...
ErrorLog ${APACHE_LOG_DIR}/errores-www-daw-com.log
CustomLog ${APACHE_LOG_DIR}/accesos-www-daw-com.log combined
</VirtualHost>
Como vemos, lo que diferencia un sitio de otro, ahora no es la IP, sino el puerto. Y además, si tuviéramos varias tarjetas de red en el servidor y quisiéramos servir los sitios por cualquiera de las IP que tuviera el servidor, simplemente tendríamos que sustituir la IP anterior por el asterisco ( * ), que representa a cualquier IP.
# cat /etc/apache2/sites-available/www-asir-com.conf
<VirtualHost *:80>
DocumentRoot /var/www/www-asir-com
ServerAdmin webmaster@asir.com
...
ErrorLog ${APACHE_LOG_DIR}/errores-www-asir-com.log
CustomLog ${APACHE_LOG_DIR}/accesos-www-asir-com.log combined
</VirtualHost>
# cat /etc/apache2/sites-available/www-daw-com.conf
<VirtualHost *:8080>
DocumentRoot /var/www/www-daw-com
ServerAdmin webmaster@daw.com
...
ErrorLog ${APACHE_LOG_DIR}/errores-www-daw-com.log
CustomLog ${APACHE_LOG_DIR}/accesos-www-daw-com.log combined
</VirtualHost>
Las URL para acceder a estos sitios serían:
http://www.asir.com
http://www.daw.com:8080
Los DNS resolverán los nombres a la misma IP o a una IP del servidor, en función de cuál de las dos configuraciones hubiéramos elegido.
No puede olvidarse que el servidor Apache debe escuchar por todos los puertos que utilicemos, por lo que habrá que especificarlos usando la directiva Listen.
Este método, el de puertos y el anterior, el de IP, pueden mezclarse sin ningún problema, y en el caso de que se repitiera, por error, en más de una directiva <VirtualHost> el valor de IP y de puerto, Apache mostraría el sitio web de los coincidentes que estuviera primero en el orden alfabético de los ficheros de /etc/apache/sites-enabled. Este será el motivo por el que muchas veces nos saldrá el sitio web por defecto, cuando en realidad esperábamos otro, pero como el fichero de configuración del sitio por defecto se llama 000-default.conf, normalmente estará primero en el orden alfabético.