Ausführen mehrerer Sites von einem einzigen Python-Web-Framework
-
01-07-2019 - |
Frage
Was kommt gut (oder zumindest klug) Wegen mehrerer Standorte von einem einzigen, gemeinsamen Python-Web-Framework ausgeführt wird (dh: Pylone, Turbogears, etc)? Ich weiß, dass Sie die Umleitung auf der Domäne oder Pfad basiert tun können, die URI neu zu schreiben an einer ortsspezifischen Position zu zeigen, und ich habe auch einige viehisch „if site == 'site1' / elseif / elseif / etc
“ gesehen, dass Ich mag würde vermeiden.
Lösung
Django hat diese eingebaut. Siehe die Websites Rahmen .
Als allgemeine Technik, umfasst eine ‚Wirt‘ Spalte in Ihrem Datenbankschema an die Daten angehängt Sie wollen Host-spezifisch sein, schließen Sie dann die Host
HTTP-Header in der Abfrage, wenn Sie Daten abgerufen werden.
Andere Tipps
Mit Django auf Apache mit mod_python, Host mehrere (nicht verwandten) django Websites einfach mit der folgenden Apache-Konfiguration:
<VirtualHost 1.2.3.4>
DocumentRoot /www/site1
ServerName site1.com
<Location />
SetHandler python-program
SetEnv DJANGO_SETTINGS_MODULE site1.settings
PythonPath "['/www'] + sys.path"
PythonDebug On
PythonInterpreter site1
</Location>
</VirtualHost>
<VirtualHost 1.2.3.4>
DocumentRoot /www/site2
ServerName site2.com
<Location />
SetHandler python-program
SetEnv DJANGO_SETTINGS_MODULE site2.settings
PythonPath "['/www'] + sys.path"
PythonDebug On
PythonInterpreter site2
</Location>
</VirtualHost>
Keine Notwendigkeit für mehrere Apache-Instanzen oder Proxy-Server. eine andere PythonInterpreter Richtlinie für jede Website mit (der eingegebene Name ist frei wählbar) hält die Namensräume zu trennen.
Ich benutze CherryPy als meine Web-Server (die mit Turbogears mitgeliefert wird), und ich einfach mehrere Instanzen des CherryPy Web-Server auf verschiedenen Ports gebunden zu localhost laufen. Dann konfiguriere ich Apache mit mod_proxy und mod_rewrite transparent vorwärts Anforderungen an den richtigen Port basierend auf der HTTP-Anforderung.
mehrere Serverinstanzen verwenden auf lokalen Ports ist eine gute Idee, aber Sie nicht über einen voll funktionsfähigen Web-Server benötigen, um HTTP-Anforderungen zu umleiten.
Ich würde verwenden Pfund als Reverse Proxy den Job zu erledigen. Es ist klein, schnell, einfach und tut genau das, was wir hier brauchen.
WAS IST PFUND:
- ein Reverse-Proxy. Es geht Anfragen von Client-Browser an einen oder mehrere Back-End-Server
- ein Load-Balancer: es werden die Anforderungen von den Client-Browsern unter mehreren Back-End-Servern verteilen, während Sitzungsinformationen zu halten
.- ein SSL-Wrapper. Pound wird HTTPS-Anfragen von Client-Browsern entschlüsseln und sie als Plain-HTTP auf den Back-End-Server übergeben
- ein HTTP / HTTPS Sanitizer. Pfund werden Anträge auf Richtigkeit überprüfen und akzeptieren nur wohlgeformt diejenigen
- ein Failover-Server. Sollte ein Back-End-Server ausfallen, Pound wird die Tatsache zur Kenntnis nehmen und vorbei Anfragen, um es zu stoppen, bis es wieder
- eine Anfrage Redirector. Anfragen unter Server verteilt werden können, auf die angeforderte URL nach