Entfernen Sie zunächst %code% . Django behandelt %code% von selbst und muss nicht %code% von uWSGI neu geschrieben haben. Es kann schädlich sein, wenn %code% nicht von uWSGI aus den Headern entfernt wird.
Zweitens, entfernen Sie %code% von nginx config. %code% ist bereits in der Datei uwsgi_params definiert und sollte %code% sein (wie in uwsgi_params), nicht %code% , wenn Sie %code% an django übergeben.
Nach diesen Optimierungen sollte django %code% als URL-Präfix behandeln und wird den URL-Dispatcher und die URL darauf umstellen.
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 Ссылка
Der nginx %code% 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)
%code% kann den Platz von %code%
einnehmenSpeziell für Django,
%Vor%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.
Wenn die Anwendung so einfach ist, dass ein einfaches "/ Präfix" zu einer Zeile in %code% hinzugefügt werden kann, dann bevorzuge ich diese einfache Lösung ohne mehr.
Andernfalls muss "/ prefix" an die Spalte %code% 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 .