gpt4 book ai didi

Python + LigHTTPd + CGI : How to configure for executing single script for entire subpath

转载 作者:行者123 更新时间:2023-11-28 21:53:47 27 4
gpt4 key购买 nike

我正在为我打算在 Web 上使用的 Python 编写一组脚本。目前,我有一些使用 import cgi 的测试脚本可以正常工作。

我基本上想要 FastCGI/WSGI 的行为。在这种情况下,我可以将特定 URL 下的所有请求传递给脚本。例如,假设用户访问 URL http://www.example.com/script/run/1?param=true。对于 /script 下的任何请求,我想要一个给定的脚本,例如 /opt/mypython/webscript.py,它使用 import cgi 来运行并接收 URL 和 GET 参数。在这种情况下,我希望能够从脚本中看到包含 /run/1 的参数和 GET 参数的字典。

出于安全考虑,理想情况下我们希望脚本位于文档根目录之外。

我还希望能够在我的脚本中使用 x-sendfile header 。我知道 FastCGI 模块支持这个,但不确定标准 CGI 模块是否支持。

我愿意迁移到 FastCGI,但我不想重构我的任何代码。此外,我想在开发过程中使用标准 CGI,因为我研究过的唯一 FastCGI 实现 (flup) 会导致脚本被缓存,因此在代码更改时需要完全重启整个网络服务器。此外,flup 要求您使用 CGI 接口(interface)进行一些不同的工作,这意味着需要重写一些主要代码。

flup 确实提供了一些不错的便利;它的 environ 变量提供了一个 PATH_INFO 参数,用于指定我上面提到的子路径。但是同样,标准的 CGI 模块并没有提供所有这些便利,因此 flup 需要重新编写代码,并且在代码经常更改的开发过程中它的效率非常低。

因此,理想的解决方案是使用标准 CGI 和 FastCGI 来完成此操作,而无需重新编写代码。所以在开发过程中我可以使用标准的 CGI,伴随着它的性能下降(python 解释器每次都必须启动的事实),然后当代码准备好用于生产时,很容易将它迁移到基于 FastCGI 的后端,这样它就可以以最高性能运行。

我正在使用当前版本的 lighttpd。如果可能的话,我需要做什么来为此配置 lighttpd?

最佳答案

在您的 lighttpd 配置中,创建一个将 http://host/script 映射到您的 CGI 脚本路径的别名:

alias.url += ( "/script" => "/opt/mypython/webscript.py" )

为该脚本启用 CGI 处理:

$HTTP["url"] =~ "^/script" {
cgi.assign = ( "" => "" )
}

创建检查查询字符串和 PATH_INFO 环境变量的 CGI 脚本:

import cgi, os, sys

print 'Content-Type: text/plain\n'

if 'PATH_INFO' in os.environ:
print os.environ['PATH_INFO']
form = cgi.FieldStorage()
if 'param' in form:
print form['param'].value

最后,通过网络浏览器调用脚本:

http://localhost/script/run/1?param=true

结果:

/run/1
true

关于Python + LigHTTPd + CGI : How to configure for executing single script for entire subpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25511466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com