nginx dient Django in einem Unterverzeichnis über uWSGI

8

Ich habe bereits einige vorherige Threads durchgegangen: Wie setze ich ein Unterverzeichnis in nginx mit Django wie man django unter einem Vorort hinter nginx einsetzt Serving-Flaschen-App im Unterverzeichnis nginx + uwsgi

Die grundlegende Lektion ist, dass Sie nur Ihre Site (s-available) konfigurieren müssen, um dies zu erreichen. Ich habe jetzt verschiedene Permutationen von

ausprobiert %Vor%

Alles läuft perfekt, wenn ich den Ort als "/" definiere (und SCRIPT_NAME, modifier1, PATH_INFO und root egal. Aber wenn ich versuche, ein Unterverzeichnis zu verwenden, wird immer Seite nicht gefunden (404):

%Vor%

(bearbeiten) Es wird ein Verzeichnis zur Anfrage hinzugefügt. Was finde ich nicht heraus?

(versucht forced_script_name - sollte dies nicht verwenden und gibt andere Arten von Kopfschmerzen - und uwsgi config Einstellung)

BEARBEITEN:

%Vor%

Funktioniert nicht ... Der Socket ist da und funktioniert, wenn ich für / konfiguriere - ich kann einfach nicht sehen, was mir fehlt.

UPDATE:

%Vor%

Dies lädt die Seite, aber alle Links verweisen auf Ссылка anstelle von Ссылка

    
Bjorn 04.03.2016, 09:31
quelle

4 Antworten

0

Schließlich gab es auf, dies "ordentlich" zu tun.

Die letzte Lösung bestand lediglich darin, eine Einstellungsvariable zu erstellen, die ich der Datei static_url voranstellte und die Datei urls.py projiziert. Kein SCRIPT_NAME oder etwas Kompliziertes auf der nginx-Seite.

    
Bjorn 14.03.2016, 22:54
quelle
3

Der nginx uwsgi_modifier1 ist in uWSGI veraltet.

Ihr Ziel ist es, in der Lage zu sein, eine wsgi-App von überall aus zu hosten, ohne dass die App angepasst werden muss, um zu berücksichtigen, woher sie stammt.

Die aktuelle Methode dafür in uWSGI besteht darin, Mountpoints für jede URI-App-Kombination wie folgt zuzuordnen:

%Vor%

Hosten mehrerer Apps im selben Prozess (auch Verwalten von SCRIPT_NAME und PATH_INFO)

mount kann den Platz von module

einnehmen

Speziell für Django,

%Vor%     
shanemgrey 08.11.2016 20:59
quelle
0

Entfernen Sie zunächst uwsgi_modifier1 30; . Django behandelt SCRIPT_NAME von selbst und muss nicht PATH_INFO von uWSGI neu geschrieben haben. Es kann schädlich sein, wenn SCRIPT_NAME nicht von uWSGI aus den Headern entfernt wird.

Zweitens, entfernen Sie uwsgi_param PATH_INFO ""; von nginx config. PATH_INFO ist bereits in der Datei uwsgi_params definiert und sollte $document_uri sein (wie in uwsgi_params), nicht , wenn Sie SCRIPT_NAME an django übergeben.

Nach diesen Optimierungen sollte django SCRIPT_NAME als URL-Präfix behandeln und wird den URL-Dispatcher und die URL darauf umstellen.

    
GwynBleidD 04.03.2016 10:58
quelle
0

Wenn die Anwendung so einfach ist, dass ein einfaches "/ Präfix" zu einer Zeile in urls.py hinzugefügt werden kann, dann bevorzuge ich diese einfache Lösung ohne mehr.

Andernfalls muss "/ prefix" an die Spalte domain im Datensatz für Ihre Website in der Tabelle Sites in Django angefügt werden Administrator. Die Domain sollte dann "example.com/project" mit der zweiten Lösung sein, denn Django muss die Domain und das Präfix kennen, insbesondere für die korrekte Weiterleitung. Natürlich muss das Präfix auch von der URL der Anfrage vom Webserver entfernt werden, wie Sie es jetzt in nginx Einstellungen tun.

Normalerweise teile ich die Überprüfung solcher Bereitstellungen auf zwei Fragen:

  • Meldet der Webserver (nginx) die erwarteten kürzeren oder längeren URLs an Django?
  • Kennt Django seine vollständige Basis-URL und verwendet sie diese auf allen Webseiten konsistent?

Ich benutze sowohl nginx log als auch Django logging enabled, um zu sehen, welcher von ihnen schließlich falsch dargestellt wird. (Sie haben nicht genug wichtige Informationen geschrieben.)

Ein wichtiger Fall, der getestet werden sollte, ist: Stellen Sie sicher, dass Webseiten, die eine Authentifizierung erfordern, zur Anmeldeseite hin und zurück weitergeleitet werden, auch wenn Sie diese URLs nach dem Abmelden versuchen.

Weitere Details finden Sie in der ähnlichen Frage .

    
hynekcer 09.03.2016 20:04
quelle

Tags und Links