You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lighttpd CGI环境下Python脚本被浏览器下载而非执行的问题排查

Lighttpd CGI环境下Python脚本被浏览器下载而非执行的问题排查

看起来你已经做了不少基础配置,但Python脚本还是没被正确解析成CGI程序,反而被当作静态文件下载,咱们一步步来排查和解决:

  • 检查配置的重复定义问题
    你在全局配置和/cgi-bin/的URL匹配块里都定义了cgi.assign,lighttpd的配置解析顺序可能导致重复配置引发意外。建议去掉全局的cgi.assign,只保留URL匹配块内的配置,避免冲突:

    server.modules = (
        "mod_access",
        "mod_cgi",
        "mod_accesslog"
    )
    
    $HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign = ( 
            ".sh" => "/bin/bash",
            ".py" => "/usr/bin/python" 
        )
    }
    
  • 确认Python的shebang路径与配置一致
    你的脚本里写的是#!/usr/bin/python,但有些系统里默认的Python路径可能是/usr/bin/python3,或者你的Python实际安装路径不同。可以用which python或which python3命令确认实际路径,然后同步修改脚本的shebang行和lighttpd配置里的路径。

  • 确保脚本输出符合CGI规范
    这是很容易忽略的点:CGI脚本必须先输出HTTP头信息,再输出内容,两者之间用空行分隔。你的Bash脚本其实也不符合规范,但可能lighttpd做了兼容处理,而Python脚本没有。修改你的test.py:

    #!/usr/bin/python
    print "Content-Type: text/plain"
    print
    print "Hi from Python"
    

    如果是Python3环境,要改成print函数的形式:

    #!/usr/bin/python3
    print("Content-Type: text/plain")
    print()
    print("Hi from Python")
    

    没有正确的HTTP头,服务器无法识别这是CGI程序的输出,就会当作静态文件下载。

  • 查看lighttpd错误日志排查细节
    可以去lighttpd的日志目录(通常是/var/log/lighttpd/)查看error.log,里面会记录脚本解析失败的具体原因,比如权限问题、路径错误、语法错误等,能帮你快速定位问题。

  • 检查模块加载顺序
    确保mod_cgi模块在处理静态文件的模块(比如mod_staticfile)之前加载,这样服务器会优先用CGI模块解析/cgi-bin/下的脚本,而不是当作静态文件处理。

备注:内容来源于stack exchange,提问作者jackhab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:24:50