So hosten Sie mehrere Fläschchen Anwendungen unter einer einzigen domain mit Hosting auf nginx?
Was ich versuche zu erreichen:
Habe ich ein nginx web-server-hosting mydomain.com. Wenn jemand meine domain.com in Ihrer client möchte ich auf mein server zu dienen index.html von /var/www/mydomain/
Wenn Sie geben mydomain.com/flaskapp1 Sie sollten sehen, flaskapp1. Wenn Sie geben mydomain.com/flaskapp2 Sie sollten sehen, flaskapp2.
Habe ich es geschafft, die eine oder andere Flasche apps serviert, mit dem tutorial hier http://www.markjberger.com/flask-with-virtualenv-uwsgi-nginx/ aber wenn Sie versuchen, zu implementieren, dienen zwei separate Fläschchen apps, die ich laufen in Schwierigkeiten. Anstatt die Kolben app bekomme ich eine 404 Meldung, wenn ich versuche, auf die entweder der Kolben apps mit mydomain.co.uk/flaskapp oder mydomain.co.uk/flaskapp2 in einem browser.
Dies ist, was ich habe, so weit:
cat /etc/nginx/sites-available/mydomain.co.uk
server {
listen 80;
server_name www.mydomain.co.uk mydomain.co.uk;
location / {
root /var/www/html/;
index index.html index.htm;
}
location /flaskapp {
include uwsgi_params;
uwsgi_pass unix:/tmp/flaskapp.sock;
}
location /flaskapp2 {
include uwsgi_params;
uwsgi_pass unix:/tmp/flaskapp2.sock;
}
}
Den oben genannten conf-Datei wurde sim verbunden, die in /etc/nginx/sites-enabled
.
cat /etc/uwsgi/apps-available/flaskapp.ini
[uwsgi]
vhost = true
socket = /tmp/flaskapp.sock
venv = /var/www/flaskapp/venv
chdir = /var/www/flaskapp
module = flaskapp
callable = app
cat /etc/uwsgi/apps-available/flaskapp2.ini
[uwsgi]
vhost = true
socket = /tmp/flaskapp2.sock
venv = /var/www/flaskapp2/venv
chdir = /var/www/flaskapp2
module = flaskapp2
callable = app
Beide .ini-Dateien wurden symlinked in /etc/uwsgi/apps-enabled
. UWSGI startet gut ohne irgendwelche Probleme und läuft. Beide flaskapp.Socke und flaskapp2.Socke sind im Besitz von www-data
cat /var/www/flaskapp/flaskapp.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World from flaskapp1!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
cat /var/www/flaskapp2/flaskapp2.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World from flaskapp2!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
cat /var/www/mydomain.co.uk/index.html
<!DOCTYPE html>
<html>
<body>
<h1>mydomain.co.uk</h1>
<p>This is the index page of my domain.co.uk</p>
</body>
</html>
Beiden virtuellen Umgebungen haben-Kolben installiert ist und führen Sie die Kolben-apps mit der Entwicklungs-server.
Ich hoffe, es ist etwas einfach, dass ich es verpasst habe.
- Aber was ist dein problem? was nicht funktioniert? Was ist das Problem?
- Ich bin immer Fehler 404 für beide Kolben-apps. die index.html ist in Ordnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die uwsgi-Dokumentation für NGINX hier.
Speziell:
Änderung meiner
flaskapp.ini
undflaskapp2.ini
Dateien enthalten die mount-Punkte für die apps und drehen Sie auf den verwalten-Skript-name-variable gearbeitet hat.cat /etc/uwsgi/apps-available/flaskapp.ini
cat /etc/uwsgi/apps-available/flaskapp2.ini
Und nun beide Kolben-apps sind, laufen über uwsgi durch nginx als erforderlich.
Das problem ist hier: beide Kolben apps haben keine Ahnung, dass Sie serviert wurden vom Unterverzeichnis Ihrer domain. Nginx ist die übergabe vollständige URL nicht die URL relativ zu diesem Verzeichnis, also alle URL ausgelöst wird relativ zum root. Wir sehen, dass im Beispiel:
Davon aus, dass du 3 Ansichten in Ihrer flaskapp, serviert auf urls
/one/
,/two/
und/three/
. Also, wenn Sie versuchen, Zugriff auf anzeigen, die auf URL -/one/
Sie die Eingabe-Adresse:http://yourdomain.com/flaskapp/one/
. Kolben erhalten von nginx URL/flaskapp/one/
aber es gibt keine solche anzeigen in dieser app, so senden 404 in Reaktion.Was Sie tun können, ist informieren jeden flaskapp, dass Sie nicht serviert auf der domain-root, sondern auf bestimmten Unterverzeichnis. Dies können Sie erreichen, durch das senden
SCRIPT_NAME
uwsgi_param
mit Unterverzeichnis Standort in Wert, so dass deine nginx config haben:SCRIPT_NAME
richtig. Ich habe noch nie verwendetSCRIPT_NAME
mit Kolben, aber ich weiß, dass ist die Lösung mit django (die gleichen ein nginx uWSGI-Konfiguration).