Django und Flask auf demselben Nginx-Server mit Gunicorn

Django und Flask auf demselben Nginx-Server mit Gunicorn

Wenn ich mysite.com besuche, läuft derzeit auf meiner Hauptseite eine Djago-App. Allerdings möchte ich, dass auf mysite.com/flaskapp eine separate Flask-Anwendung läuft. Ich kann zwei nginx-Site-fähige Konfigurationsdateien einrichten und jede App auf einem anderen Port ausführen, aber aus verschiedenen Gründen möchte ich sie alle auf demselben Port ausführen (wenn möglich). Wenn ich meinen flaskapp/-Standort in meiner Nginx-Serverdatei konfiguriere, erhalte ich einen 404-Fehler.

Hier ist meine Supervisor-Konfigurationsdatei:

[program:MYSITE]
command=/var/www/html/MYSITE/prodenv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/MYSITE.sock MYSITE.wsgi
directory=/var/www/html/MYSITE/public_html
autostart=true
autorestart=true
stderr_logfile=/var/log/MYSITE.err.log
stdout_logfile=/var/log/MYSITE.out.log


[program:FLASKAPP]
directory=/var/www/html/MYSITE/public_html/FLASKAPP/api
command=/var/www/html/MYSITE/public_html/FLASKAPP/venv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock FLASKAPP:app
autostart=true
autorestart=true
stderr_logfile=/var/log/FLASKAPP.err.log
stdout_logfile=/var/log/FLASKAPP.out.log

Und meine Site-fähige Nginx-Datei:

server {
    listen 80;
    listen [::]:80;

    server_name MYSITE;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
            root /var/www/html/MYSITE/public_html;
        expires 30d;
        }

    location / {
            include proxy_params;
            proxy_pass http://unix:/var/www/html/MYSITE/public_html/MYSITE.sock;
        }

    location /FLASKAPP/ {
        include proxy_params;
        proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
        }


}

Irgendwelche Ideen? Danke!

Antwort1

Es liegt ein Tippfehler im Proxy-Pfad vor. Sie haben proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock;, aber es sollte geben fastcgi_pass unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock;. Entfernen Sie http://, ändern Sie proxy_passin fastcgi_passund alles sollte funktionieren.

Antwort2

Ich habe es herausgefunden. Ich habe die URL umgeschrieben, um das Unterverzeichnis zu entfernen, und jetzt funktioniert alles.

Vor:

    location /FLASKAPP/ {
        include proxy_params;
        proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
    }

nach:

location /FLASKAPP/ {
    include proxy_params;
    proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
    rewrite ^/FLASKAPP(.*)$ $1 break;
}



      

verwandte Informationen