Come devo aggiungere il percorso WSGIPython in VirtualHost per il server Windows?

Nov 19 2020

Sto cercando di aggiungere WSGIPythonPathin VirtualHost, ma mi sta gettando un errore:

Errore di sintassi sulla riga 549 di /etc/httpd/conf/httpd.conf:

WSGIPythonPath non può verificarsi nella sezione

Ho provato a risolverlo seguendo: Dove dovrebbe puntare WSGIPythonPath nel mio virtualenv?

Ma, cercando di più, ho scoperto che WSGIDaemonProcesse WSGIProcessGroupnon sono supportati su Windows secondo Perché WSGIDaemonProcess non è disponibile su Windows? .

Quindi, come devo aggiungere WSGIPythonPathe dove in modo da poter ospitare più siti Django sul mio server Apache24.

Qualsiasi aiuto sarebbe utile.

Ecco il mio httpd.conffile:

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>

Risposte

1 Razenstein Nov 21 2020 at 23:21

Ho avuto un viaggio difficile mettendo in piedi due virtù. host con Apache mod_wsgi sotto Windows. Quindi la soluzione qui è per Apache / mod_wsgi e Windows.

In generale trovo abbastanza difficile separare Apache / mod_wsgi per windows e unix poiché in molti articoli i due sono mescolati o non è affatto chiaramente menzionato di quale si sta parlando.

  1. Ecco la parte importante della definizione dell'host virt in httpd-vhosts.conf perché in Apache / mod_wsgi per Windows non hai WSGIDaemonProcess / WSGIProcessGroup disponibile.
   <VirtualHost *:80>
            ServerName name1
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site1
            ......                                                                            
     </VirtualHost>
 
    <VirtualHost *:80>
            ServerName name2
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site2
            ......                                                                            
     </VirtualHost>

Se non aggiungi "application-group ..." solo l'host virtuale che viene chiamato per primo dopo il riavvio di Apache verrà inizializzato con wsgi.py e settings.py e successivamente riceverà tutte le richieste a virt. host che hanno un WSGIScriptAlias ​​o in altre parole che sono gestiti da mod_wsgi !! A quanto mi risulta, questo è un bug piuttosto serio perché un virt host dovrebbe sempre avere il proprio "thread" come comportamento standard di Apache / mod_wsgi. Btw Site1 e Site2 sono solo nomi che devono essere diversi.

  1. Il WSGIPythonPath non può essere assegnato all'interno di virt. Sezione host. Devi inserire l'assegnazione del percorso equivalente nel file wsgi.py di ciascuna delle tue app:
    sys.path.append('D:/........../xxxxx_project/xxxxx')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxxx.settings'
    application = get_wsgi_application()