Wie würden Sie ein Python-Web-Server mit mehreren vhosts einrichten?
-
22-08-2019 - |
Frage
Ich habe gesagt wsgi ist der Weg zu gehen und nicht mod_python. Aber genauer gesagt, wie würden Sie Ihre Multi Website-Server-Umgebung einrichten? Wahl des Web-Server, etc?
Lösung
Apache + mod_wsgi ist eine gemeinsame Wahl.
Hier ist ein einfaches Beispiel vhost, Setup, alle Anfragen für / wsgi / etwas auf die Anwendung abzubilden oben (die dann bei PATH_INFO aussehen kann eine Aktion zu wählen, oder aber Sie Ihre Disposition tun). Die Stamm-URL ‚/‘ auch auf die WSGI Anwendung weitergeleitet wird.
LoadModule wsgi_module /usr/local/lib/mod_wsgi.so
...
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /www/example/htdocs
WSGIScriptAliasMatch ^/$ /www/example/application.py
WSGIScriptAlias /wsgi /www/example/application.py
</VirtualHost>
Sie können die WSGIProcessGroup Direktive verwenden Handler für verschiedene vhosts zu trennen, wenn Sie möchten. Wenn Sie vhosts' Skripte müssen unter verschiedenen Benutzern ausgeführt werden müssen Sie WSGIDaemonProcess verwenden, anstatt des eingebetteten Python-Interpreter.
application.py würde, wenn laufen, lassen Sie Ihre WSGI aufrufbar in der globalen ‚Anwendung‘ Variable. Sie können auch einen Run-as-Haupt-Footer für die Kompatibilität mit alten Schule CGI hinzufügen:
#!/usr/bin/env python
from mymodule import MyApplication
application= MyApplication()
if __name__=='main':
import wsgiref.handlers
wsgiref.handlers.CGIHandler().run(application)
Andere Tipps
würde ich Nginx für den Web-Server empfehlen. Schnell und einfach einzurichten.
Sie würden vermutlich einen Unix-Benutzer pro vHost haben wollen - so dass jedes Home-Verzeichnis hält seine eigene Anwendung, Python-Umgebung und Server-Konfiguration. Auf diese Weise können Sie eine bestimmte App sicher neu zu starten, einfach durch Arbeitsprozesse zu töten, die Ihr vHost besitzt.
Nur ein Tipp, hoffen, dass es hilft.
Sie können Apache verwenden und mod_wsgi . Auf diese Weise können Sie noch Apache eingebaute Unterstützung für vhosts verwenden.