500 Внутренняя ошибка сервера Flask API на Lighttpd - PullRequest
0 голосов
/ 14 апреля 2020

Я несколько дней пытался построить Flask Api под Lighttpd (под R asp Pi), но у меня проблема "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 голосов
/ 15 апреля 2020

lighttpd работает на порте 80 в вашей конфигурации. Когда lighttpd пытается запустить бэкэнд, бэкэнд не будет работать, потому что ваш код python также пытается прослушивать порт 80

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

Поскольку вы настроили lighttpd для запуска бэкенда, вы должны настроить его на Слушай на стандартный. lighttpd создает настроенный вами сокет ("/tmp/api-fcgi.sock") и запускает бэкэнд с этим сокетом на стандартный вывод вашего приложения.

...