sethandler script run execcgi configurar linux perl apache cgi

linux - run - ¿Cómo configuro Apache 2 para ejecutar scripts Perl CGI?



run cgi script on apache server (8)

Me gustaría configurar Apache 2 ejecutándose en Kubuntu para ejecutar scripts Perl CGI. Intenté algunos pasos que encontré al buscar en Google, pero nada parece funcionar.

¿Cuál es la forma correcta de lograr esto?


A partir de Ubuntu 12.04 (Precise Pangolin) (y tal vez una versión o dos antes) simplemente instalar apache2 y mod-perl través de Synaptic y colocar sus scripts CGI en / usr / lib / cgi-bin es realmente todo lo que necesita hacer.


Esta publicación tiene como objetivo rescatar a las personas que sufren * que no pueden configurar adecuadamente Apache2 para Perl en Ubuntu. (Las configuraciones del sistema específicas para su máquina Linux se mencionarán entre corchetes, como [this]).

Posible resultado de una instalación incorrecta de Apache 2:

  1. Navegador tratando de descargar el archivo .pl en lugar de ejecutar y dar el resultado.
  2. Prohibido.
  3. Error de servidor interno.

Si uno sigue los pasos que se describen a continuación con una inteligencia razonable, él / ella puede superar los errores mencionados anteriormente.

Antes de comenzar los pasos. Vaya al /etc/hosts y agregue la dirección IP / nombre de dominio`, por ejemplo:

127.0.0.1 www.BECK.com

Paso 1: Instalar apache2 Paso 2: Instalar mod_perl Paso 3: Configurar apache2

abrir sites-available/default y agregar lo siguiente,

<Files ~ "/.(pl|cgi)$"> SetHandler perl-script PerlResponseHandler ModPerl::PerlRun Options +ExecCGI PerlSendHeader On </Files> <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] > ####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that''s a story for another day. Let''s concentrate on washing out the issue at hand) #### Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files] <Directory [path-where-you-want-your-.pl-and-.cgi-files]> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .pl Order allow,deny allow from all </Directory> <Files ~ "/.(pl|cgi)$"> SetHandler perl-script PerlResponseHandler ModPerl::PerlRun Options +ExecCGI PerlSendHeader On </Files> <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] > ####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that''s a story for another day. Let''s concentrate on washing out the issue at hand) #### Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files] <Directory [path-where-you-want-your-.pl-and-.cgi-files]> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .pl Order allow,deny allow from all </Directory>

Etapa 4:

Agregue las siguientes líneas a su archivo /etc/apache2/apache2.conf .

AddHandler cgi-script .cgi .pl <Files ~ "/.pl$"> Options +ExecCGI </Files> <Files ~ "/.cgi$"> Options +ExecCGI </Files> <IfModule mod_perl.c> <IfModule mod_alias.c> Alias /perl/ /home/sly/host/perl/ </IfModule> <Location /perl> SetHandler perl-script PerlHandler Apache::Registry Options +ExecCGI </Location> </IfModule> <Files ~ "/.pl$"> Options +ExecCGI </Files>

Paso 5:

Muy importante , o al menos eso creo, solo después de hacer este paso, lo hice funcionar.

AddHandler cgi-script .cgi .pl

<Files ~ "/.pl$"> Options +ExecCGI </Files> <Files ~ "/.cgi$"> Options +ExecCGI </Files> <IfModule mod_perl.c> <IfModule mod_alias.c> Alias /perl/ /home/sly/host/perl/ </IfModule> <Location /perl> SetHandler perl-script PerlHandler Apache::Registry Options +ExecCGI </Location> </IfModule> <Files ~ "/.pl$"> Options +ExecCGI </Files>

Paso 6

Muy importante , o al menos eso creo, solo después de hacer este paso, lo hice funcionar.

Agregue el siguiente /etc/apache2/sites-enabled/000-default

<Files ~ "/.(pl|cgi)$"> SetHandler perl-script PerlResponseHandler ModPerl::PerlRun Options +ExecCGI PerlSendHeader On </Files>

Paso 7:

Ahora agregue su secuencia de comandos Perl como test.pl en el lugar donde mencionó antes en el paso 3 como [ ruta-donde-quiera-su-.pl-y-.cgi-archivos ].

Da permisos al archivo .pl usando chmod y luego, escribe la dirección webaddress/cgi-bin/test.pl en la barra de direcciones del navegador, ahí lo tienes, lo tienes.

(Ahora, muchas de las cosas habrían sido redundantes en este post. Por favor ignórenlas).


Hay dos formas de manejar scripts CGI, SetHandler y AddHandler .

SetHandler cgi-script

se aplica a todos los archivos en un context dado, sin importar cómo se nombran, incluso index.html o style.css .

AddHandler cgi-script .pl

es similar, pero se aplica a los archivos que terminan en .pl , en un contexto dado. Puede elegir otra extensión o varias, si lo desea.

Además, el módulo CGI debe cargarse y Options +ExecCGI configurado. Para activar el módulo, emita

a2enmod cgi

y reinicia o recarga Apache. Finalmente, la secuencia de comandos Perl CGI debe ser ejecutable. Entonces los bits de ejecución deben ser configurados

chmod a+x script.pl

y debería comenzar con

#! /usr/bin/perl

como su primera línea.

Cuando utiliza SetHandler o AddHandler (y Options +ExecCGI ) fuera de cualquier directiva, se aplica globalmente a todos los archivos. Pero puede restringir el contexto a un subconjunto adjuntando estas directivas en el interior, por ejemplo, Directory

<Directory /path/to/some/cgi-dir> SetHandler cgi-script Options +ExecCGI </Directory>

Ahora SetHandler aplica solo a los archivos dentro / path / to / some / cgi-dir en lugar de todos los archivos del sitio web. Lo mismo AddHandler con AddHandler dentro de una Directory o Location , por supuesto. Luego se aplica a los archivos dentro / path / to / some / cgi-dir, que terminan en .pl .


Para aquellos que, como yo, que han estado buscando a tientas en los tutoriales y documentos de mucho más de lo que necesitaban saber ahora, y que solo quieren ver que la cosa funciona para los principiantes, descubrí que lo único que tenía hacer fue agregar:

AddHandler cgi-script .pl .cgi

Para mi archivo de configuración

http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler

Para mi situación, esto funciona mejor, ya que puedo poner mi script de Perl en cualquier lugar que quiera, y simplemente agregar la extensión .pl o .cgi.

La respuesta de Dave Sherohman menciona la solución AddHandler también.

Por supuesto, aún debe asegurarse de que los permisos / propiedad en su secuencia de comandos estén configurados correctamente, especialmente que la secuencia de comandos será ejecutable. Tome nota de quién es el "usuario" cuando se ejecuta desde una solicitud http - por ejemplo, www o www-data.


Si ha instalado exitosamente el servidor web Apache y Perl, siga los siguientes pasos para ejecutar el script cgi usando perl en los sistemas ubuntu.

Antes de comenzar con el scripting CGI, es necesario configurar el servidor apache de tal forma que reconozca el directorio CGI (donde se guardan los programas cgi) y permita la ejecución de programas dentro de ese directorio.

  1. En Ubuntu, el directorio cgi-bin generalmente reside en la ruta / usr / lib, si no está presente, crea el directorio cgi-bin usando el siguiente comando. cgi-bin debería estar en esta ruta en sí.

    mkdir /usr/lib/cgi-bin

  2. Emita el siguiente comando para verificar el estado de permiso del directorio.

    ls -l /usr/lib | less

Compruebe si el permiso se ve como "drwxr-xr-x 2 root root 4096 2011-11-23 09:08 cgi- bin". Si es así, vaya al paso 3.

Si no, emita el siguiente comando para asegurar el permiso apropiado para nuestro directorio cgi-bin.

sudo chmod 755 /usr/lib/cgi-bin sudo chmod root.root /usr/lib/cgi-bin

  1. Dar permiso de ejecución al directorio cgi-bin

    sudo chmod 755 /usr/lib/cgi-bin

Por lo tanto, su directorio cgi-bin está listo para funcionar. Aquí es donde pones todos tus scripts cgi para su ejecución. Nuestro siguiente paso es configurar apache para reconocer el directorio cgi-bin y permitir la ejecución de todos los programas en él como scripts cgi.

Configurando Apache para ejecutar script CGI usando perl

  1. Se debe agregar una directiva en el archivo de configuración del servidor apache para que sepa la presencia de CGI y la ubicación de sus directorios. Inicialmente vaya a la ubicación del archivo de configuración de apache y ábralo con su editor de texto favorito

    cd /etc/apache2/sites-available/ sudo gedit 000-default.conf

  2. Copie el contenido siguiente en el archivo 000-default.conf entre la línea de códigos "DocumentRoot / var / www / html /" y "ErrorLog $ {APACHE_LOG_DIR} /error.log"

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted

  3. Reinicie el servidor apache con el siguiente código

    sudo service apache2 restart

  4. Ahora necesitamos habilitar el módulo cgi que está presente en las versiones más nuevas de ubuntu de manera predeterminada

    sudo a2enmod cgi.load sudo a2enmod cgid.load

  5. En este punto, podemos volver a cargar el servidor web apache para que vuelva a leer los archivos de configuración.

    sudo service apache2 reload

La parte de la configuración de apache ya terminó, permítanos comprobarlo con un programa cgi perl de muestra.

Poniéndolo a prueba

  1. Vaya al directorio cgi-bin y cree un archivo cgi con extensión .pl

    cd /usr/lib/cgi-bin/ sudo gedit test.pl

  2. Copie el siguiente código en test.pl y guárdelo.

    #!/usr/bin/perl -w print “Content-type: text/html/r/n/r/n”; print “CGI working perfectly!! /n”;

  3. Ahora da el permiso de ejecución test.pl.

    sudo chmod 755 test.pl

  4. Ahora abra ese archivo en su navegador web http: //Localhost/cgi-bin/test.pl

  5. Si ve el resultado "CGI funcionando perfectamente", está listo para comenzar. Ahora descargue todos sus programas en el directorio cgi-bin y empiece a usarlos.

NB: No te olvides de dar tus nuevos programas en cgi-bin, chmod 755 permisos para ejecutarlo correctamente sin ningún error interno del servidor.


Supongo que has echado un vistazo a mod_perl ?

¿Has probado el siguiente tutorial ?

EDITAR: en relación con su publicación, quizás podría incluir una muestra del código dentro de su archivo .cgi . Tal vez incluso las primeras líneas?


Tendrá que echar un vistazo a su registro de errores Apache para ver qué es el "error interno del servidor". Los cuatro casos más probables, en mi experiencia serían:

  1. El programa CGI se encuentra en un directorio que no tiene habilitada la ejecución de CGI. Solución: agregue la opción ExecCGI a ese directorio a través de httpd.conf o un archivo .htaccess.

  2. Apache solo está configurado para ejecutar CGI desde un directorio cgi-bin dedicado. Solución: mueva el programa CGI allí o agregue una AddHandler cgi-script .cgi a httpd.conf.

  3. El programa CGI no está configurado como ejecutable. Solución (suponiendo un sistema operativo * nix): chmod +x my_prog.cgi

  4. El programa CGI sale sin enviar encabezados. Solución: ejecute el programa desde la línea de comandos y verifique que a) realmente se ejecuta en lugar de morir con un error en tiempo de compilación yb) genera el resultado correcto, que debe incluir, como mínimo, un encabezado Content-Type y una línea en blanco siguiendo el último de sus encabezados.


(La búsqueda en Google me llevó a esta pregunta aunque no pedí perl)

Tuve un problema al ejecutar scripts (aunque bash no perl). Apache tenía una configuración de ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ sin embargo, el registro de errores de Apache mostraba que el File does not exist: /var/www/cgi-bin/test.html .

Intenté poner el script en /usr/lib/cgi-bin/ y /var/www/cgi-bin/ pero ninguno estaba funcionando.

Después de una prolongada sesión de Google, lo que se me sudo a2enmod cgi fue sudo a2enmod cgi y todo cayó en su lugar con /usr/lib/cgi-bin/ .