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:
- Navegador tratando de descargar el archivo .pl en lugar de ejecutar y dar el resultado.
- Prohibido.
- 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.
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
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
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
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
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
Reinicie el servidor apache con el siguiente código
sudo service apache2 restart
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
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
Vaya al directorio cgi-bin y cree un archivo cgi con extensión .pl
cd /usr/lib/cgi-bin/ sudo gedit test.pl
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”;
Ahora da el permiso de ejecución test.pl.
sudo chmod 755 test.pl
Ahora abra ese archivo en su navegador web http: //Localhost/cgi-bin/test.pl
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.
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:
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.Apache solo está configurado para ejecutar CGI desde un directorio
cgi-bin
dedicado. Solución: mueva el programa CGI allí o agregue unaAddHandler cgi-script .cgi
a httpd.conf.El programa CGI no está configurado como ejecutable. Solución (suponiendo un sistema operativo * nix):
chmod +x my_prog.cgi
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/
.