Lighttpd上的500个内部服务器错误烧瓶Api

时间:2020-04-14 08:02:39

标签: flask raspberry-pi fastcgi lighttpd

我努力在Lighttpd(在Rasp Pi下)下构建Flask Api却遇到了“ 500 Internal Server Error”的问题。

在“ /var/www/api/api.py ”下,

#!/usr/bin/env python
import requests
from flask import Flask
from flask import request
from flask import jsonify

app = Flask(__name__)

@app.route("/", methods=["GET"])
def home():

    #return "<h3>TestLine</h3>"
    return jsonify("TestLine")

@app.route("/GetDevice", methods=["GET"])
def getdevice():

    Subject = request.args.get("Subject")

    return jsonify("TestLine 123")

app.run(host = "0.0.0.0", port = 80)

在“ /var/www/api/api.fcgi ”下,

#!/usr/bin/env python
from flup.server.fcgi import WSGIServer
from api import app

if __name__ == "__main__":
    WSGIServer(app, debug = True).run()

在“ /etc/lighttpd/lighttpd.conf ”下,

debug.log-request-handling = "enable"

server.modules   += ( "mod_fastcgi" )

server.modules   += ( "mod_rewrite" )

server.modules   += ( "mod_alias" )

server.modules   += ( "mod_accesslog" )

server.document-root        = "/var/www"

#server.port = 80

server.modules += ( "mod_cgi" )

mimetype.assign = (
 ".html" => "text/html", 
 ".txt" => "text/plain",
 ".jpg" => "image/jpeg",
 ".png" => "image/png",
 ".js" => "text/javascript",
 ".css" => "text/css"
)

static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", ".inc", ".pl" )

cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                       ".cgi" => "/usr/bin/perl",
                       ".rb"  => "/usr/bin/ruby",
                       ".erb" => "/usr/bin/eruby",
                       ".py"  => "/usr/bin/python",
                       ".php" => "/usr/bin/php-cgi" )

index-file.names   += ( "index.pl",   "default.pl",
                       "index.rb",   "default.rb",
                       "index.erb",  "default.erb",
                       "index.py",   "default.py",
                       "index.php",  "default.php" )

server.errorlog    = "/var/log/lighttpd/error.log"
accesslog.filename = "/var/log/lighttpd/access.log"

fastcgi.debug = 1
fastcgi.server = ("/api.fcgi" =>
  ((
     "socket" => "/tmp/api-fcgi.sock",
     "bin-path" => "/var/www/api/api.fcgi",
     "check-local" => "disable",
     "max-procs" => 1
  ))
)

alias.url = ( 
   "/api/" => "/var/www/api"
)

url.rewrite-once = (
  "^(/api($|/.*))$" => "$1",
  "^(/.*)$" => "/api.fcgi$1"
)

在终端下运行“ /var/www/api/api.fcgi”时没有错误。 我希望有人能真诚地帮助我指出错误,并感谢您。

1 个答案:

答案 0 :(得分:0)

lighttpd在配置中的端口80上运行。当lighttpd尝试启动后端时,后端将失败,因为您的python代码也在尝试在端口80上侦听

app.run(host = "0.0.0.0", port = 80)

由于已将lighttpd配置为启动后端,因此应将其配置为在stdin上侦听。 lighttpd将创建您已配置的套接字(“ /tmp/api-fcgi.sock”),并在应用程序的stdin上使用该套接字启动后端。