Saltar al contenido


Hay tres principales sistemas para crear un servidor web, IIS, Nginx y Apache. En este post vamos a explicar cómo realizar la instalación de Apache y configurar el servidor web para que funcione bajo HTTP/2 en OS X.
 

Instalación de Apache

Hay varias formas de instalar Apache, se puede realizar desde la terminal o a través de algún software específico, como puede ser el caso de MAMP que está disponible tanto para OS X como para Windows.

En este caso, vamos a utilizar el Apache que viene instalado por defecto en OS X. Para conocer su versión introducimos el siguiente comando en la terminal. 

apachectl -V
 

Para comprobar el correcto funcionamiento ya podemos acceder a http://localhost.

Creación de la aplicación web

Ahora vamos a crear un nuevo proyecto para acceder a través de localhost en el navegador web. Para ello nos dirigimos a la carpeta /Library/WebServer/Documents y creamos una carpeta con nombre http2dev.

mkdir /Library/WebServer/Documents/http2dev
touch /Library/WebServer/Documents/http2dev/index.html
echo "<h1>HTTP/2 Dev</h1>" > /Library/WebServer/Documents/http2dev/index.html

En este punto ya se puede acceder a http://localhost/http2dev y ver la página web creada anteriormente:


Ya tenemos nuestra aplicación web en un servidor Apache, pero lo ideal sería tener un dominio local, y de esta forma poder configurar de forma independiente cada uno de los nuevos sitios. Esta configuración permite al administrador utilizar un servidor para alojar otros dominios. Cada dominio tendrá su propia configuración y directorio dónde se alojarán todos los ficheros de la aplicación web. Una vez creada la estructura web, el siguiente paso sería configurar un VirtualHost, para ello se debe modificar el fichero /etc/apache2/httpd2.conf descomentando estas dos líneas:

#LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
#Include /private/etc/apache2/extra/httpd-vhosts.conf

​Quedando así:

LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
Include /private/etc/apache2/extra/httpd-vhosts.conf

Ahora ya se ha habilitado el uso de VirtualHost en Apache, a continuación se configura:

<VirtualHost *:80>
 ServerAdmin [email protected]
 DocumentRoot "/Library/WebServer/Documents"
 ServerName localhost
 ServerAlias localhost
 ErrorLog "/private/var/log/apache2/localhost-error_log"
 CustomLog "/private/var/log/apache2/localhost-access_log" common
</VirtualHost>

<VirtualHost *:80>
 ServerAdmin [email protected]
 DocumentRoot "/Library/WebServer/Documents/http2dev"
 ServerName http2dev.local
 ServerAlias http2dev.local
 ErrorLog "/private/var/log/apache2/http2dev.local-error_log"
 CustomLog "/private/var/log/apache2/http2dev.local-access_log" common
</VirtualHost>

También se debe modificar el fichero hosts del sistema que se encuentra en /etc/hosts y añadir la siguiente línea:

127.0.0.1 http2dev.local

Quedando de la siguiente forma:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 http2dev.local

De esta forma, se ha referenciado el nuevo dominio para que apunte al servidor local de Apache. Para comprobar el funcionamiento, iniciamos de nuevo Apache con el siguiente comando:​

sudo apachectl -k restart

y entramos en http://http2dev.local

Para ello, desde la terminal vamos a lanzar el comando cURL.

curl -I http2dev.local


Se puede observar como efectivamente está funcionando bajo HTTP/1.1, es obvio, aún no se ha configurado HTTP/2.
 

Configuración de HTTP/2 en Apache

Por defecto, Apache no trae el módulo HTTP/2 instalado, por lo que tenemos que instalarlo de forma manual, para ello se deben seguir los pasos que se detallan a continuación:

 

sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
brew install httpd24 --with-privileged-ports --with-http2
sudo cp -v /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons
sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

Una vez ejecutados estos comandos iniciamos Apache de nuevo, para ello se ejecuta:
sudo apachectl start

Apache se controla mediante el comando apachectl.


 

Ahora que Apache ya tiene instalado HTTP/2 se debe activar el módulo correspondiente para poder utilizar el protocolo. Para ello se debe modificar el archivo httpd.conf y descomentar el siguiente módulo para activarlo:
LoadModule http2_module libexec/mod_http2.so


En el fichero que se ha configurado el VirtualHost se debe añadir el uso del protocolo para HTTP/2 de la siguiente forma:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/Library/WebServer/Documents/http2dev"
ServerName http2dev.local
 Protocols h2 h2c http/1.1
ServerAlias http2dev.local
ErrorLog "/private/var/log/apache2/http2dev.local-error_log"
CustomLog "/private/var/log/apache2/http2dev.local-access_log" common
</VirtualHost>


Probando HTTP/2

En este punto el servidor Apache ya está configurado para funcionar con HTTP/2. Para ejecutar cURL hay que indicarle que utilice HTTP/2 de la siguiente forma:
curl --http2 -I http2dev.local

​Se puede observar como efectivamente, ahora se está utilizando HTTP/2.

Cabe destacar que Firefox y Chrome no soportan HTTP/2 sobre HTTP, por lo que a la hora de poner en marcha un proyecto se deberá utilizar un certificado. Durante el desarrollo se puede utilizar un certificado gratuito, como por ejemplo, los que proporciona Let’s Encrypt.​


HTTP/2 no soportado por cURL

Puede ocurrir que la versión de cURL que está instalada en el sistema no reconozca el comando compatible con HTTP/2.


En este caso, hay que reinstalar cURL para que acepte –http2 de la siguiente forma
Primero, se instala cURL con soporte nghttp2.
brew install curl --with-nghttp2
A continuación, se sustituye el enlace simbólico de cURL en el sistema.
brew link curl --force
De esta forma, cURL ya acepta HTTP/2.


 

Otros artículos destacados