Sous bash, quel est le moyen le plus simple de configurer lighttpd pour appeler un script python local basé sur une URL particulière?

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

  •  05-07-2019
  •  | 
  •  

Question

Sous bash, quel est le moyen le plus simple de configurer lighttpd pour appeler un script python local tout en transmettant les chaînes de requête ou les paires nom-valeur incluses avec l'URL sous forme d'option de ligne de commande permettant à l'application python locale d'analyser?

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

Voici un exemple de script d'installation et de configuration 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
Était-ce utile?

La solution

Eh bien, je ne voudrais surtout pas jouer avec le script d'installation, mais l'exécuter une fois puis éditer le fichier de configuration lighttpd résultant (Webconsole.conf dans votre cas).

Vous devez ensuite enregistrer les scripts Python pour CGI, comme pour Perl dans le script d'installation. Vous pouvez ajouter une ligne

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

sous la ligne .pl correspondante, ce qui ferait de Python une autre option CGI pour / web-console / path (recherchez les documents lighttpd si vous souhaitez enregistrer .py en tant que CGI dans un chemin). .

Ensuite, votre script CGI Python app1.py, app2.py, ... doit se conformer à la spécification CGI, qui, si je me souviens bien, passe correctement les paramètres d'URL en tant que variables d'environnement. Vous ne pouvez donc pas simplement utiliser sys.argv. Je suis sûr qu'il existe un module Python qui effectue l'extraction de paramètres pour vous. (En Perl, le module CGI de Lincoln Stein est capable à la fois des arguments env et en ligne de commande, mais je ne suis pas sûr de ceux de Python.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top