Wie soll ich den WSGIPython-Pfad in VirtualHost für Windows Server hinzufügen?

Nov 19 2020

Ich versuche hinzuzufügen WSGIPythonPathin VirtualHostaber es wirft mir eine Fehlermeldung:

Syntaxfehler in Zeile 549 von /etc/httpd/conf/httpd.conf:

WSGIPythonPath kann nicht innerhalb eines Abschnitts auftreten

Ich habe versucht, das Problem folgendermaßen zu beheben: Wo sollte WSGIPythonPath in meiner virtuellen Umgebung verweisen?

Aber auf mehr Forschung, fand ich , dass WSGIDaemonProcessund WSGIProcessGroupnicht unter Windows unterstützt nach Warum WSGIDaemonProcess ist unter Windows nicht verfügbar? .

Also, wie soll ich hinzufügen WSGIPythonPathund wo, damit ich mehrere Django-Sites auf meinem Apache24-Server hosten kann.

Jede Hilfe wäre von Vorteil.

Hier ist meine httpd.confDatei:

LoadFile "c:/python37/python37.dll"
LoadModule wsgi_module "c:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/python37"
WSGIPythonPath "E:/edukon/"
Listen 7020

<VirtualHost *:7020>
ServerName 000.000.000.000

# Django Project

WSGIScriptAlias / "E:/edukon/edukon/wsgi.py"


<Directory "E:/edukon/edukon">
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

Alias /static "E:/edukon/static/"
<Directory "E:/edukon/static/">
    Require all granted
</Directory>

Alias /media "E:/edukon/media/"
<Directory "E:/edukon/media/">
    Require all granted
</Directory>
</VirtualHost>

Antworten

1 Razenstein Nov 21 2020 at 23:21

Ich hatte eine schwierige Reise, um zwei Tugenden aufzubauen. Hosts mit Apache mod_wsgi unter Windows. Die Lösung hier ist also für Apache / mod_wsgi und Windows.

Im Allgemeinen finde ich es ziemlich schwierig, Apache / mod_wsgi für Windows und Unix zu trennen, da in vielen Artikeln die beiden gemischt sind oder überhaupt nicht klar erwähnt wird, über welche gesprochen wird.

  1. Hier ist der wichtige Teil der Definition des virtuellen Hosts in httpd-vhosts.conf, da in Apache / mod_wsgi für Windows keine WSGIDaemonProcess / WSGIProcessGroup verfügbar ist.
   <VirtualHost *:80>
            ServerName name1
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site1
            ......                                                                            
     </VirtualHost>
 
    <VirtualHost *:80>
            ServerName name2
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site2
            ......                                                                            
     </VirtualHost>

Wenn Sie nicht "Anwendungsgruppe ..." hinzufügen, wird nur der virtuelle Host, der nach dem Neustart von Apache zuerst aufgerufen wird, mit wsgi.py und settings.py initialisiert und erhält anschließend alle Anforderungen an virt. Hosts mit einem WSGIScriptAlias ​​oder mit anderen Worten, die von mod_wsgi behandelt werden !! Nach meinem Verständnis ist dies ein ziemlich schwerwiegender Fehler, da ein virtueller Host immer seinen eigenen "Thread" als Standardverhalten von Apache / mod_wsgi erhalten sollte. Übrigens sind Site1 und Site2 nur Namen, die unterschiedlich sein müssen.

  1. Der WSGIPythonPath kann nicht innerhalb der virt zugewiesen werden. Hosts-Bereich. Sie müssen die entsprechende Pfadzuweisung in die Datei wsgi.py jeder Ihrer Apps einfügen:
    sys.path.append('D:/........../xxxxx_project/xxxxx')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxxx.settings'
    application = get_wsgi_application()