Nginx-Konfiguration für statische Sites im Root-Verzeichnis, Flask-Apps in Unterverzeichnissen

Ich hätte gern eine statische Seite in meinem root public_html Verzeichnis, dann Flask Apps in ihren eigenen Unterverzeichnissen (zB public_html / foo). Das statische Stammverzeichnis funktioniert wie erwartet.

Ich habe Stunden damit verbracht, die nginx-Konfiguration zu bearbeiten, um die Flask-Apps zu arbeiten, aber immer am Ende an der gleichen Stelle, nämlich dass der folgende Code immer "Bad Config" zurückgibt, wenn ich zu mysite / foo migriere. Ich möchte, dass es "Hallo Welt!"

Wenn ich die nginx-Konfiguration so ändere, dass der server root in public_html / foo ist, arbeiten die Flask-Anwendungen wie erwartet (dh mysite.com gibt 'Hello World!' Zurück). In der folgenden Konfiguration zeigt der Flask-Index immer noch auf mysite.com, wenn ich glaube, dass es auf mysite.com/foo verweisen sollte

/ Etc / nginx / sites-enabled / mysite

upstream frontends { # gunicorn server 127.0.0.1:18000; } server { listen 80; server_name www.mysite.com; rewrite ^/(.*) http://mysite.com$1 permanent; } server { listen 80; server_name mysite.com; server_name_in_redirect off; root /home/ubuntu/public_html/mysite; access_log /home/ubuntu/logs/mysite/access.log; error_log /home/ubuntu/logs/mysite/error.log; location / { index index.html; } location /foo { try_files $uri @foo; } location @foo { proxy_pass http://frontends; break; } } 

/home/ubuntu/public_html/mysite/foo/foo.py

 from flask import Flask from flask import render_template app = Flask(__name__) @app.route('/') def index(): return 'Hello World!' @app.route('/foo') def test(): return 'Bad config' @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 if __name__ == '__main__': app.run() 

/home/ubuntu/public_html/mysite/foo/deploy.py

 workers = 2 bind = '127.0.0.1:18000' proc_name = 'foo_gunicorn' pidfile = 'foo.pid' 

Flasche wird mit gunicorn -c deploy.py foo:app gestartet gunicorn -c deploy.py foo:app

Aktualisieren

Hinzufügen von rewrite /foo/(.*) /$1 break; Zum nginx location /foo block macht mysite / foo zurück 'Hello World', aber alle seine Links (wie die auf das Stylesheet aus einer Vorlage) noch auf die Website root (zB mysite / static / style.css statt mysite) /foo/static/style.css)

One Solution collect form web for “Nginx-Konfiguration für statische Sites im Root-Verzeichnis, Flask-Apps in Unterverzeichnissen”

Habe eine Antwort von mitsuhiko (Flask lead dev): http://flask.pocoo.org/snippets/35/

Sie müssen eine ReverseProxied-Klasse in Ihrer Flask-App definieren und mehrere proxy-set-header Zeilen zum location /foo Block in der nginx config hinzufügen.

  • Bereitstellung von Django-Projekt mit Gunicorn und Nginx
  • Nginx serviert kein Django-Bild
  • UWSGI + NGINX 502 Bad Gateway
  • Django-social-auth gibt 502 Fehler mit Google OpenID, aber nur mit wenigen Benutzern
  • Wie kann ich Cherrypy wsgi hinter Nginx setzen?
  • Bereitstellen von Django mit Gunicorn Kein Modul namens ImportError: Kein Modul namens Validierung
  • Warum wird nicht neu installierte Django App mit NGINX statische Assets?
  • Sind uWSGI und Nginx erforderlich, um eine Flask App zu bedienen?
  • Flasche + Nginx + uWSGI: ImportError: Kein Modul namens Site
  • Tornado Python als Dämon
  • Eine Flasche App mit Nginx und Gunicorn laufen lassen
  • Python ist die beste Programmiersprache der Welt.