我努力在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”时没有错误。 我希望有人能真诚地帮助我指出错误,并感谢您。
答案 0 :(得分:0)
lighttpd在配置中的端口80上运行。当lighttpd尝试启动后端时,后端将失败,因为您的python代码也在尝试在端口80上侦听
app.run(host = "0.0.0.0", port = 80)
由于已将lighttpd配置为启动后端,因此应将其配置为在stdin上侦听。 lighttpd将创建您已配置的套接字(“ /tmp/api-fcgi.sock”),并在应用程序的stdin上使用该套接字启动后端。