In bash, qual è il modo più semplice per configurare lighttpd per chiamare uno script python locale basato su un particolare URL?

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

  •  05-07-2019
  •  | 
  •  

Domanda

In bash, qual è il modo più semplice per configurare lighttpd per chiamare uno script python locale mentre passa qualsiasi stringa di query o coppia nome-valore inclusa con l'URL come opzione da riga di comando affinché l'app python locale possa analizzare?

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

Ecco un esempio di script di installazione e configurazione di 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
È stato utile?

Soluzione

Mh, per prima cosa non farei confusione con lo script di installazione, ma eseguirlo una volta e quindi modificare il file di configurazione lighttpd risultante (webconsole.conf nel tuo caso).

È quindi necessario registrare gli script Python per CGI, come avviene per Perl nello script di installazione. Puoi aggiungere una riga

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

sotto la corrispondente riga .pl che renderebbe Python un'altra opzione CGI per / web-console / path (cerca i documenti lighttpd se vuoi registrare .py come CGI in qualunque ) .

Quindi, il tuo script Python CGI app1.py, app2.py, ... deve rispettare le specifiche CGI, che se ricordo la correttezza passa i parametri URL come variabili di ambiente. Quindi non puoi semplicemente usare sys.argv. Sono sicuro che esiste un modulo Python che esegue l'estrazione dei parametri per te. (In Perl, il modulo CGI di Lincoln Stein è in grado di supportare sia argomenti env che a riga di comando, ma non sono sicuro di quello di Python).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top