Django/Gunicorn mit Nginx Reverse Proxy – Falsche Weiterleitung zum Basispfad

Django/Gunicorn mit Nginx Reverse Proxy – Falsche Weiterleitung zum Basispfad

Ich habe eine Django-App, die erfolgreich mit Gunicorn/Uvicorn unter einem Unterpfad meiner Domäne (example.com/myapp) läuft.

Der Nginx-Vhost sieht folgendermaßen aus:

server {

    server_name example.com;

    location /myapp/ {
        proxy_pass http://myapp_gunicorn/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /myapp/static/ {
        alias /home/www/myapp/static/;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

upstream myapp_gunicorn {
    server 127.0.0.1:8002;
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    server_name example.com;
    listen 80;
    return 404; # managed by Certbot
}

Hier ist der systemd-Dienst mit dem Startbefehl von Gunicorn:

[Unit]
Description=myapp gunicorn daemon
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/www/myapp
ExecStart=/home/venvs/myapp/bin/gunicorn myapp.asgi:application -b 0.0.0.0:8002 -w 8 -k uvicorn.workers.UvicornWorker --log-file /home/www/myapp.log

[Install]
WantedBy=multi-user.target

WeiterlesenSO über Django im Unterordner mit Nginxhabe ich die folgenden Einstellungen zu meinem Django settings.py hinzugefügt:

FORCE_SCRIPT_NAME = '/myapp'
USE_X_FORWARDED_HOST = True
# To make Django trusts the https from the Nginx proxy
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

Ich kann erfolgreich auf meine App und ihre Unterpfade zugreifen wiehttps://example.com/myapp/endpointund die Django-Admin-Seitehttps://example.com/myapp/admin(erfolgreich umgeschrieben alshttps://example.com/myapp/admin/login/?next=/admin/) Zum Beispiel.

Wenn ich jedoch auf die Validierungsschaltfläche auf der Django-Admin-Seite klicke, werde ich fälschlicherweise zum Basispfad umgeleitet (https://example.com/admin/login/?next=/admin/). Außerdem erhalte ich eine 404 für alle statischen Dateien, sie werden auch unter dem Basispfad bereitgestellthttps://example.com/static/xxxanstelle des Unterpfadshttps://example.com/myapp/static/xxx, obwohl ich dachte, dass es im virtuellen Host richtig eingerichtet wäre.

Ich habe mir ähnliche Probleme auf SO angesehen (einschließlichdieses sehr ähnliche), aber es hat mir nicht geholfen.

Irgendeine Idee?

verwandte Informationen