Cómo ejecutar un script CGI en un servidor web
Como cualquier administrador experimentado de servidores web te dirá, cargar scripts CGI en un servidor es solamente la mitad de la batalla. Aún debes asegurarte de que se ejecuten correctamente.
![Cómo ejecutar un script CGI en un servidor web - Video](https://i.ytimg.com/vi/5GRl6hPPbyc/hqdefault.jpg)
¿Cómo se ejecuta un script CGI?
Nos encontramos ahora en el punto en el que el servidor web ha decidido que debe ejecutar el programa CGI y ha hecho una solicitud al sistema operativo para ejecutar el archivo. Aquí es donde comienzan a surgir muchos problemas porque existen varios elementos que deben estar correctamente configurados para que el programa se ejecute exitosamente y envíe la salida de vuelta al navegador web de forma adecuada.
1. El archivo debe ser ejecutable (solo en UNIX)
En UNIX, los archivos tienen atributos que no existen en el mundo de Windows NT. Uno de ellos es el bit ejecutable. Cada archivo tiene una configuración que le indica al sistema operativo si puede ser ejecutado como un programa y si puede ser ejecutado solo por el propietario del archivo, solo por el grupo al que pertenece el propietario del archivo o por todos en el servidor. Para que el sistema operativo ejecute el archivo, debe estar marcado como ejecutable para "Everyone". Esto es lo que hace el comando "chmod".
No entraremos en detalles sobre cómo funciona "chmod", pero cuando veas una instrucción que dice algo como "haz un chmod 755 en el archivo program.cgi", lo que te está diciendo es que hagas que el archivo sea ejecutable por todos para que pueda ser ejecutado desde el servidor web.
2. El archivo debe apuntar a un ejecutable válido (solo en UNIX)
El servidor sabe que debe ejecutar un archivo .cgi como un programa, pero también necesita saber cómo hacerlo. Si se trata de un ejecutable compilado, no hay problema: el servidor simplemente lo ejecuta. Pero si se trata de un script que utiliza un lenguaje como Perl, el servidor necesita saber dónde encontrar el programa Perl. Para ello, se utiliza la primera línea del archivo. Por ejemplo:
#!/usr/bin/perl
![](https://newsmatic.com.ar/wp-content/uploads/crear-una-serie-de-instrucciones-activadas-por-clic-en-powerpoint-imagen-3-150x150.webp)
En UNIX, esto apunta a un archivo ejecutable (en este caso, el programa se llama perl) que ejecutará tu script.
Los dos primeros caracteres, #!, se llaman shebang, que es una sintaxis común en UNIX. Si tu script comienza con la línea de arriba y tu servidor no tiene un programa llamado /usr/bin/perl, todo fallará y recibirás un error. Para los scripts de Perl, la línea anterior es típica y la mayoría de los servidores tienen /usr/bin/perl. Pero en algunos casos raros, las cosas están configuradas de manera diferente y debes editar esta primera línea para apuntar a un programa válido para ejecutar.
3. El archivo debe tener una extensión ejecutable (solo en NT)
En el mundo de Windows NT, no existen permisos de ejecución y el shebang no se aplica.
Por lo tanto, no necesitas preocuparte por utilizar "chmod" en servidores que ejecutan Windows NT y puedes ignorar la primera línea del archivo. Lo que debes tener en cuenta, sin embargo, es la extensión del archivo.
Windows decide qué programa abrirá un archivo según su extensión. Si quieres ejecutar un script de Perl en NT, por ejemplo, debes darle una extensión de .pl para que el sistema operativo sepa que debe utilizar Perl para abrir y ejecutar el archivo.
4. El programa debe devolver una respuesta válida
Cualquier programa CGI que se ejecute debe devolver una respuesta válida al navegador. Sin embargo, si el programa encuentra un problema durante su ejecución y se detiene, podría mostrar un mensaje de error. Si estuvieras ejecutando el programa en una ventana normal en NT o UNIX, simplemente verías el mensaje de error.
![](https://newsmatic.com.ar/wp-content/uploads/preguntas-y-respuestas-sobre-html-soluciones-a-los-problemas-mas-comunes-150x150.png)
Pero en el mundo web, el programa debe devolver su respuesta al servidor web, que la empaqueta y la envía de vuelta al navegador. Si el programa muestra un mensaje de error, el servidor web no obtiene la respuesta que espera y devuelve un error general (por ejemplo, error 501) al navegador, indicando que hubo un problema al ejecutar el programa.
¿Cómo funciona un script CGI en realidad?
Ahora que comprendes cómo se deben configurar las cosas, es un buen momento para repasar todo el proceso y ver exactamente qué sucede cuando se ejecuta un script CGI. Volvamos a nuestro ejemplo original y veamos la secuencia de eventos (asumiendo un servidor UNIX):
- El navegador solicita la URL en la etiqueta ACTION y pasa todos los datos junto con la solicitud.
- El servidor reconoce que .cgi significa que este archivo debe ejecutarse.
- Verifica que los programas CGI tengan permiso para ejecutarse en el servidor.
- Verifica que los programas CGI tengan permiso para ejecutarse en el directorio /cgi-bin.
- El servidor lanza un subproceso para ejecutar el programa en el sistema operativo.
- El sistema operativo abre el archivo y verifica la primera línea para ver qué programa utilizar con el script.
- Ejecuta este programa y le pasa el nombre de archivo a ejecutar.
- El script se ejecuta, realiza las acciones necesarias y luego devuelve una respuesta HTML, utilizando declaraciones print(), por ejemplo.
- La respuesta completa se envía de vuelta al servidor, que luego la empaqueta en una respuesta HTTP, incluyendo la longitud del contenido, entre otros datos.
- El servidor envía la respuesta completa de vuelta al navegador, que la muestra.
¿Y si no funciona de esa manera?
Por supuesto, ese proceso completo no siempre sale según lo planeado y hay algunas cosas que pueden obstaculizar el correcto funcionamiento de tu programa. Por ejemplo:
Permisos de archivo
Cuando el servidor web lanza un subproceso para ejecutar el programa (paso 5 anterior), realiza un truco: cambia el ID de usuario a uno con muy pocos o sin permisos. Esto se hace por motivos de seguridad y evita que otros escriban un script que sobrescriba archivos importantes por accidente o borre árboles de directorios completos.
Pero esto también crea un problema cuando tu programa intenta acceder a archivos para leer y escribir. Si quieres que tu programa escriba en un archivo, debes asegurarte de que tenga los permisos configurados correctamente para que este usuario (generalmente llamado "nobody") pueda escribir en él. Una vez más, debes utilizar el comando "chmod". Un comando como "chmod 777 nombre_del_archivo.txt" dará permisos de Lectura, Escritura y Ejecución para el archivo a cualquier persona en la máquina del servidor, por lo que incluso cuando el servidor cambie al nuevo usuario, aún tendrá acceso al archivo.
Es importante recordar los permisos de archivo al intentar configurar un script CGI y, a menudo, son la causa de que no funcione correctamente. Asegúrate de seguir las instrucciones sobre qué permisos de archivo son necesarios para cada archivo a fin de configurar el script correctamente.
![](https://newsmatic.com.ar/wp-content/uploads/todo-lo-que-necesitas-saber-sobre-las-baterias-de-tu-laptop-1-150x150.jpg)
Tipo de contenido
Lo primero que un script CGI necesita devolver, suponiendo que está enviando una respuesta HTML de vuelta al usuario, es "Content-type: text/html", seguido de dos saltos de línea (creando una línea vacía). Esto es necesario en cualquier script CGI para que el servidor web sepa qué tipo de datos se está enviando de vuelta al navegador y así procesarlo de manera adecuada. El script CGI podría, en realidad, devolver cualquier tipo de respuesta que elija, ya sea texto sin formato, un documento PDF o un archivo de Microsoft Word. Pero el 99% de las veces, el resultado de cualquier script CGI será HTML sin formato.
Si el script se ejecuta y muestra algo diferente a "Content-type", el servidor web devolverá un mensaje de error al navegador diciendo que el script devolvió una respuesta inválida.
¿Cómo solucionarlo?
Cuando tengas un script que no funcione, deberás seguir una serie de pasos para averiguar qué está mal. La mayoría de las veces, estarás configurando un script que alguien más escribió, por lo que puede ser difícil determinar qué está mal. Pero si sigues algunos pasos, debería ser más fácil.
Comienza asegurándote de que los scripts CGI estén permitidos. Si no eres el administrador del servidor web, lo primero que debes verificar es si te permiten ejecutar scripts CGI. Algunos proveedores de servicios de Internet (ISP) no permiten a los usuarios ejecutar scripts CGI en sus sitios web. Otros lo permiten solo en ciertos directorios, mientras que otros lo permiten en cualquier lugar sin restricciones. Realmente, depende de tu proveedor de alojamiento, el servidor web que están utilizando y lo que permiten.
También, asegúrate de que el archivo sea ejecutable. Si no lo es, eso es un problema.
Luego, verifica la línea shebang. Observa la primera línea del archivo y verifica si el programa que está tratando de ejecutar realmente existe. Si dice #!/usr/bin/perl, debes asegurarte de que este programa exista en tu servidor web. Si no sabes cómo verificarlo, puedes preguntar a tu ISP o administrador de sitio web y ellos deberían poder decirte. Para los scripts de Perl, algunas personas pueden necesitar cambiarlo a /usr/local/bin/perl o /usr/bin/perl5, o posiblemente a otras ubicaciones.
![](https://newsmatic.com.ar/wp-content/uploads/por-que-no-configurar-tu-propio-servidor-dns-aprende-como-en-windows-2000-y-linux-1-150x150.png)
El siguiente paso es intentar ejecutar el script de forma local. Esperemos que tengas acceso a una línea de comandos en tu servidor web. En otras palabras, puedes iniciar sesión por Telnet en tu máquina UNIX o abrir una ventana de comandos en tu servidor NT. Si no tienes este tipo de acceso, será más difícil determinar qué está mal.
Inicia sesión en la máquina, navega al directorio donde se encuentra el script y trata de ejecutarlo desde la línea de comandos. Puede que te muestre un mensaje de error si el script tiene un error de sintaxis, por ejemplo, lo cual te ayudará a editar el archivo y corregirlo. Si se ejecuta perfectamente, sabrás que el problema probablemente se encuentre en la configuración de tu servidor web o que sea posiblemente un problema de seguridad y permisos de archivo.
No olvides revisar el registro de errores. Los servidores web mantienen un registro de todos los errores, que incluye problemas al intentar ejecutar programas CGI. Si hay un problema y tu programa no puede ejecutarse correctamente, al revisar el registro de errores, podrías ver un mensaje como "no se permite el acceso a archivo.txt", lo cual significa que tu programa intentó acceder a un archivo que no tenía los permisos de archivo configurados correctamente.
Si no tienes acceso al registro de errores de tu servidor web en tu ISP o proveedor de alojamiento, pídeles a los administradores que lo verifiquen por ti y vean si el script está generando errores. Si eso no funciona, solicita ayuda a tu administrador de sitio web. Si has verificado todos estos elementos, envía un correo electrónico a tu administrador y averigua si él o ella te ayudarán. Puede que haya alguna configuración especial o que el administrador pueda darte algunas pistas. Además, asegúrate de indicar que has intentado los pasos anteriores; al administrador le encantará. Nada es más molesto que recibir una solicitud de ayuda de personas que aparentemente no han hecho nada para intentar ayudarse a sí mismas.
Si aún estás atascado después de estos pasos, acude a la fuente. Ponte en contacto con el autor del script para obtener ayuda. Te recomiendo que utilices esto como último recurso. En toda mi experiencia con scripts CGI y ayudando a las personas a instalarlos, diría que el 95% de los problemas se deben a problemas de configuración del servidor web u otros asuntos que simplemente no puedo solucionar. Asegúrate de decirles qué pasos has intentado para resolver el problema. Yo siempre estoy más dispuesto a ayudar a alguien que ha pasado por algunos pasos de depuración por su cuenta antes de preguntarme. Desafortunadamente, no todos los clientes saben algo sobre CGI.
Por último, debes recordar que si te enfrentas a un problema que está más allá de tu comprensión, simplemente di que no. Es mejor evitar abordar un problema que no puedes solucionar que empeorarlo.
![](https://newsmatic.com.ar/wp-content/uploads/introduccion-a-la-programacion-orientada-a-objetos-con-java-objetos-1-150x150.jpg)
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo ejecutar un script CGI en un servidor web , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados