BASH에서 특정 URL을 기반으로 LOGNTPD를 로컬 Python 스크립트를 호출하도록 구성하는 가장 간단한 방법은 무엇입니까?

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

  •  05-07-2019
  •  | 
  •  

문제

BASH에서 LightTPD를 로컬 Python 스크립트를 호출하도록 LightTPD를 구성하는 가장 간단한 방법은 무엇입니까? 쿼리 문자열 또는 이름 값 쌍이 URL에 포함 된 로컬 Python 앱의 명령 줄 옵션으로 구문 분석하는 가장 간단한 방법은 무엇입니까?

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, 한 가지에 대해서는 설치 스크립트를 엉망으로 만들지 않고 한 번 실행 한 다음 결과 LightTPD 구성 파일 (webConsole.conf)을 편집합니다.

그런 다음 설치 스크립트에서 PERL에 대해 수행 된 CGI에 대한 Python 스크립트를 등록해야합니다. 라인을 추가 할 수 있습니다

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

/ web-console / path의 또 다른 CGI 옵션을 Python으로 만드는 해당 .PL 라인 아래에서 (cgi로 .py로 등록하려면 Lighttpd 문서를 찾아보십시오. 어느 길).

그런 다음 Python CGI 스크립트 App1.py, App2.py, ... 응하다 CGI 사양에, 복구를 기억하면 URL 매개 변수를 환경 변수로 전달합니다. 따라서 단순히 sys.argv를 사용할 수 없습니다. 파라미터 추출을 수행하는 파이썬 모듈이 있다고 확신합니다. (Perl에서 Lincoln Stein의 CGI 모듈은 Env와 Command Line Args를 모두 사용할 수 있지만 Python은 확실하지 않습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top