En bash, ¿cuál es la forma más sencilla de configurar lighttpd para llamar a un script de Python local basado en una URL particular?

StackOverflow https://stackoverflow.com/questions/1403672

  •  05-07-2019
  •  | 
  •  

Pregunta

En bash, ¿cuál es la forma más sencilla de configurar lighttpd para llamar a un script de Python local al pasar cualquier cadena de consulta o pares de nombre-valor incluidos con la URL como una opción de línea de comandos para que la aplicación de python local analice?

Example:
www.myapp.com/sendtopython/app1.py?Foo=Bar
results in the following occurring on the system. 
>python app1.py Foo=Bar

www.myapp.com/sendtopython/app2.py?-h
results in the following occurring on the system. 
>python app2.py –h

Aquí hay un ejemplo de script de instalación y configuración de lighttpd.

#!/bin/bash
# Install and configure web console managed by lighttpd
# Suggested Amazon EC2 AMI : ami-0d729464
#
# The console installed into /opt/web-console and 
# available on the http://_the_server_dns_/web-console

set -e -x
export DEBIAN_FRONTEND=noninteractive

function die()
{
    echo -e "$@" >> /dev/console
    exit 1
}

apt-get update && apt-get upgrade -y
apt-get -y install python
apt-get -y install unzip
apt-get -y install lighttpd

# web directory defaults to /var/www. 
WEBDIR=/var/www/logs
mkdir $WEBDIR || die "Cannot create log directory."

PYTHON=`which python`
echo $?
if [ ! $? ]
then
echo "Python interpreter not installed or not found in system path!!!" >> /dev/console
echo "Exiting setup-instance..."
exit 1
fi

#Download web-console 
FILE_DOWNLOAD_URL=http://downloads.sourceforge.net/web-console/web-console_v0.2.5_beta.zip
wget $FILE_DOWNLOAD_URL -O web-console.zip || die "Error downloading file web-console.zip"

# Install the web-console
INSTALL_DIR=/opt/web-console

mkdir $INSTALL_DIR
unzip -u -d $INSTALL_DIR web-console.zip || die "Error extracting web-console.zip"
chown www-data:www-data $INSTALL_DIR

# Configure lighttpd
cat > $INSTALL_DIR/webconsole.conf <<EOF
server.modules  += ( "mod_cgi" )
alias.url       += ( "/web-console/wc.pl" => "/opt/web-console/wc.pl" )
alias.url       += ( "/web-console/" => "/opt/web-console/wc.pl" )
\$HTTP["url"] =~ "^/web-console/" {
        cgi.assign = ( ".pl" => "/usr/bin/perl" )
}
EOF

ln -s $INSTALL_DIR/webconsole.conf /etc/lighttpd/conf-enabled/
/etc/init.d/lighttpd force-reload

exit 0
¿Fue útil?

Solución

Mh, por una parte, no me metería con el script de instalación, sino que lo ejecutaba una vez y luego editaba el archivo de configuración lighttpd resultante (webconsole.conf en tu caso).

A continuación, debe registrar los scripts de Python para CGI, como se hace para Perl en el script de instalación. Podrías agregar una línea

cgi.assign = ( ".py" => "/usr/bin/python" )

debajo de la línea .pl correspondiente que haría de Python otra opción CGI para la ruta / web-console / (busque la documentación lighttpd si desea registrar .py como CGI en cualquier ruta) .

Luego, su script Python CGI app1.py, app2.py, ... tiene que cumplir a la especificación CGI, que si recuerdo correctamente pasa parámetros de URL como variables de entorno. Así que no puedes simplemente usar sys.argv. Estoy seguro de que hay un módulo de Python que realiza la extracción del parámetro por usted. (En Perl, el módulo CGI de Lincoln Stein es capaz tanto de env como de argumentos de línea de comandos, pero no estoy seguro acerca de Python's).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top