2017-09-06 4 views
0

J'ai mon application flask fonctionnant dans lighttpd en utilisant fastcgi, et cela fonctionne bien, sauf que tous mes chemins à plusieurs niveaux (par exemple, /foo/page2) entraînent des erreurs 404, mais le les chemins à un seul niveau fonctionnent bien (par exemple,/page1).flasque hébergé via lighttpd fastcgi renvoie 404 pour les chemins à plusieurs niveaux

127.0.0.1 localhost: 5080 - [06/Sep/2017: 16: 38: 45 +0000] "GET/page1 HTTP/1.1" 200

127.0.0.1 localhost: 5080 - [06/sept/2017: 16: 39: 07 +0000] "GET/foo/page2 HTTP/1.1" 404

Je reçois le gestionnaire d'erreur de flacon 404, et non lighttpd. de

Lors de l'exécution de l'application via flask run, les chemins multiniveaux fonctionnent correctement.

127.0.0.1 - - [06/Sep/2017 11:44:56] "GET/page1 HTTP/1.1" 200

127.0.0.1 - - [06/Sep/2017 11:44 : 56] "GET/foo/page2 HTTP/1.1" 200

Mon lighttpd.conf ressemble:

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

server.port = 5080 
server.username = "foobar" 
server.groupname = "foobar" 

server.modules += (
    "mod_fastcgi", 
    "mod_rewrite", 
    "mod_alias", 
    "mod_accesslog" 
) 

$HTTP["url"] !~ "^/static" { 
    fastcgi.server = ("/" => 
     ((
      "socket" => "/tmp/foobar-fcgi.sock", 
      "bin-path" => "/home/foobar/app.fcgi", 
      "check-local" => "disable", 
      "max-procs" => 1 
     )) 
    ) 
} 

# give us debugging output 
fastcgi.debug = 1 

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

Mes itinéraires ressemblent:

PAGE = Blueprint("home", __name__) 

@PAGE.route("/page1", methods=["GET"]) 
def page1_view(): 
    ... 

@PAGE.route("/foo/page2", methods=["GET"]) 
def page2_view(): 
    ... 

Et enfin l'enregistrement d'impression bleu:

app = Flask(__name__) 

app.register_blueprint(PAGE) 
+0

Je suppose que cela fonctionne lorsque vous exécutez flacon directement? –

+0

https://redmine.lighttpd.net/projects/lighttpd/wiki/HowToPythonWSGI – gstrauss

Répondre

0

Turns out "/" comme une route fastcgi sera correspondre à quelque chose (par exemple, correspondra à la seconde "/" dans "/ foo /").

Le correctif est de changer la directive fastcgi.server à:

$HTTP["url"] !~ "^/static" { 
    fastcgi.server = ("" => 
     ((
      "socket" => "/tmp/foobar-fcgi.sock", 
      "bin-path" => "/home/foobar/app.fcgi", 
      "check-local" => "disable", 
      "max-procs" => 1 
     )) 
    ) 
}