
Wikipedia: Interfaz de entrada común (en inglés Common Gateway Interface, abreviado CGI) es una importante tecnología de la World Wide Web que permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web. CGI especifica un estándar para transferir datos entre el cliente y el programa. Es un mecanismo de comunicación entre el servidor web y una aplicación externa cuyo resultado final de la ejecución son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGIs.
Las aplicaciones CGI fueron una de las primeras prácticas de crear contenido dinámico para las páginas web. En una aplicación CGI, el servidor web pasa las solicitudes del cliente a un programa externo. Este programa puede estar escrito en cualquier lenguaje que soporte el servidor, aunque por razones de portabilidad se suelen usar lenguajes de script. La salida de dicho programa es enviada al cliente en lugar del archivo estático tradicional.
CGI ha hecho posible la implementación de funciones nuevas y variadas en las páginas web, de tal manera que esta interfaz rápidamente se volvió un estándar, siendo implementada en todo tipo de servidores web.
No se si se entiende que es y que sirve, pero considera esto: puedes crear un script con bash/python/perl o por ejemplo C, que no son precisamente lenguajes hechos para la web y interactuar con la web, hasta incluso escribir un motor de un blog en bash.
En este articulo vamos a poner en marcha el sistema cgi y lo probamos con un «Hola mundo» en bash.
Lo justo para asegurarnos que funciona.
Próximamente vamos a poner en practica estos conocimientos para crear algo mucho más complejo. En mi caso será una interfaz web para trasmitir en directo desde una cámara IP, a un servidor rtmp (youtube por ejemplo).
Si usas ISPConfig, no hay más fastidio que ir en la panel de configuración y activar el check del sitio web correspondiente.
Pero aquí vamos hacerlo a pelo directamente en apache sin ningún panel de control, Esto nos va a servir para el servidor de vídeo con YouPHPTube que puedes ver aquí: https://www.preparandonos.es/youphptube-ahora-avideo-tu-propio-youtube/
Doy por descontado que el server es una debian o derivada, que ya has instalado YouPHPTube o por lo menos apache y que el servidor tiene la IP interna de 192.168.0.2
conectate al server por ssh y dale estos comandos:
a2enmod cgid
systemctl restart apache2
ahora crea un script en bash en /usr/lib/cgi-bin/ con el nombre de prueba.sh
mcedit /usr/lib/cgi-bin/prueba.sh
y que contiene estos simples comandos:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "Hola Mundo!"
echo ""
Dale permiso de ejecución con
chmod +x /usr/lib/cgi-bin/prueba.sh
y ahora con el navegador mira si funciona navegando a esta dirección http://192.168.0.22/cgi-bin/prueba.sh
y te va a salir «Hola Mundo!»
Ahora vamos a modificar la configuración de apache para que los GCI funcionen desde otra carpeta más cómoda de usar, dentro la home de la página web de https://yourtube.tormentasolar.win que hemos puesto en marcha en el articulo anterior.
Crea el fichero de configuración
mcedit /etc/apache2/conf-available/cgi-enabled.conf
y pegale dentro esto:
<Directory "/var/www/html/yourtube.tormentasolar.win/AVideo/cgi-enabled">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .rb .py .sh
</Directory>
Crea la directory
mkdir /var/www/html/yourtube.tormentasolar.win/AVideo/cgi-enabled
chown www-data.www-data /var/www/html/yourtube.tormentasolar.win/AVideo/cgi-enabled
a2enconf cgi-enabled
crea otro cgi dentro de la nueva carpeta
echo -e '#!/bin/bash\necho "Content-type: text/html"\necho\necho "Hola Mundo!(desde cgi-enabled)"\n' > /var/www/html/yourtube.tormentasolar.win/AVideo/cgi-enabled/prueba2.sh
chmod +x /var/www/html/yourtube.tormentasolar.win/AVideo/cgi-enabled/prueba2.sh
y ahora desde el navegador puedes comprobar si funciona navegando hasta https://yourtube.tormentasolar.win/cgi-enabled/prueba2.sh, y te va a mostrar «Hola Mundo!(desde cgi-enabled)»
De momento me paro aquí, más adelante iremos a integrar este mecanismo para trasmitir en directo desde tu móvil la imagen que da una cámara IP usando CGI, ffmpeg, bash, javascript, css
Aquí un articulo introductor al CGI en bash, muy útil:
http://www.yolinux.com/TUTORIALS/BashShellCgi.html