bashでは、特定のURLに基​​づいてローカルのPythonスクリプトを呼び出すようにlighttpdを設定する最も簡単な方法は何ですか?

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

  •  05-07-2019
  •  | 
  •  

質問

bashで、ローカルpythonアプリが解析するコマンドラインオプションとしてURLに含まれるクエリ文字列または名前と値のペアを渡しながら、ローカルpythonスクリプトを呼び出すようにlighttpdを構成する最も簡単な方法は何ですか?

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

これは、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
役に立ちましたか?

解決

Mh、1つはインストールスクリプトを台無しにしないで、一度実行してから、生成されたlighttpd構成ファイル(この場合はwebconsole.conf)を編集します。

次に、インストールスクリプトでPerlに対して行われるように、CGI用のPythonスクリプトを登録する必要があります。行を追加できます

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

対応する.pl行の下で、Pythonが/ web-console /パスの別のCGIオプションになります(.pyを any パスでCGIとして登録する場合は、lighttpdのドキュメントを参照してください) 。

次に、Python CGIスクリプトapp1.py、app2.py、...は、CGI仕様に準拠する必要があります。これは、correcltyを思い出すと、URLパラメーターを環境変数として渡します。したがって、単にsys.argvを使用することはできません。パラメーターの抽出を行うPythonモジュールがあると確信しています。 (Perlでは、リンカーンスタインのCGIモジュールはenv引数とコマンドライン引数の両方に対応していますが、Pythonについてはわかりません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top