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 Ссылка
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.
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
Speziell für Django,
%Vor% 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.
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:
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 .
Tags und Links django nginx uwsgi subdirectory