Servidor web con Python

Montar servidor web con Python

Cuando queremos levantar, de forma rápida, un servidor web y no queremos instalar Apache o Nginx porque, por ejemplo, es para compartir algunos archivos, la manera más eficaz es usar Python.

Con un simple comando tendremos y estaremos ejecutando un servidor http teniendo como directorio base el mismo en el que lo estemos invocando.

Si estamos en:

user@servidor:~/scripts/logs$ 

y ejecutamos:

sudo python3 -m http.server 80

tendremos levanto, así de fácil y rápido un servidor http al cual podremos acceder desdde un navegador cualquiera escribiendo en la URL:

http://la_IP_del_servidor

Si por algún motivo no tenemos credenciales de administrador y no podemos usar sudo, podremos usarlo especificando otro puerto diferente al 80.

python3 -m http.server 900  # en el ejemplo se asigna el puerto 900

Obviamente el puerto tiene que estar libre y, si existe un cortafuegos, el puerto tiene que estar abierto.

A partir de este momento si queremos descargar un archivo podremos hacerlo con el navegador y el botón derecho del ratón o si preferimos la línea de comandos en la terminal podremos usar las herramientas wget o curl.

Opciones de un servidor http Python

Este servidor es muy básico pero nos permite algunas opciones.

Especificar la interfaz de red

Por defecto, http.server escucha en todas las interfaces de red (0.0.0.0) pero podemos restringirlo a una única interfaz específica (por ejemplo, solo localhost):

sudo python3 -m http.server 80 --bind 127.0.0.1

Cambiar el directorio base

El directorio por defecto del servidor http es desde el directorio que lo invocamos aunque podemos cambiar desde el cual el servidor servirá los archivos utilizando --directory.

sudo python3 -m http.server 80 --directory /ruta/al/directorio

Usar cgi-bin

También podemos usar http.server para ejecutar scripts CGI (Common Gateway Interface) con la opción --cgi. Esto requerirá que los scripts estén en un directorio llamado cgi-bin.

sudo python3 -m http.server 80 --cgi

Si necesitas más funcionalidades, se le puede facilitar una clase de servidor personalizada que deberá estar programada en Pyhton creando una subclase personalizada de http.server.SimpleHTTPRequestHandler y usarla con http.server.

Si aún necesitas otras funcionalidades tendrás que instalar Apache o Nginx.

Scroll al inicio