Как мне добавить путь WSGIPython в VirtualHost для сервера Windows?

Nov 19 2020

Я пытаюсь добавить WSGIPythonPathв VirtualHostно он бросает мне ошибку:

Синтаксическая ошибка в строке 549 файла /etc/httpd/conf/httpd.conf:

WSGIPythonPath не может встречаться в разделе

Я попытался решить эту проблему следующим образом: Где должен указывать WSGIPythonPath в моем virtualenv?

Но, исследуя больше, я обнаружил , что WSGIDaemonProcessи WSGIProcessGroupне поддерживаются в Windows , в соответствии с Почему WSGIDaemonProcess не доступна на Windows? .

Итак, как мне добавить WSGIPythonPathи где я могу разместить несколько сайтов Django на моем сервере Apache24.

Любая помощь будет полезна.

Вот мой httpd.confфайл:

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>

Ответы

1 Razenstein Nov 21 2020 at 23:21

У меня был трудный путь создания двух вирт. хосты с Apache mod_wsgi под Windows. Итак, решение здесь для Apache / mod_wsgi и Windows.

В общем, мне довольно сложно разделить Apache / mod_wsgi для окон и unix, поскольку во многих статьях они смешаны или вообще не упоминается четко, о чем идет речь.

  1. Это важная часть определения хоста virt в httpd-vhosts.conf, потому что в Apache / mod_wsgi для Windows у вас нет доступных WSGIDaemonProcess / WSGIProcessGroup.
   <VirtualHost *:80>
            ServerName name1
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site1
            ......                                                                            
     </VirtualHost>
 
    <VirtualHost *:80>
            ServerName name2
            WSGIScriptAlias / "D:/....../wsgi.py" application-group=site2
            ......                                                                            
     </VirtualHost>

Если вы не добавите «application-group ...», только виртуальный хост, который сначала вызывается после перезапуска Apache, будет инициализирован с помощью wsgi.py и settings.py, а затем получит все запросы к virt. хосты, у которых есть WSGIScriptAlias ​​или, другими словами, которые обрабатываются mod_wsgi !! Насколько я понимаю, это довольно серьезная ошибка, потому что виртуальный хост всегда должен иметь свой собственный «поток» в качестве стандартного поведения Apache / mod_wsgi. Кстати, Site1 и Site2 - это просто имена, которые должны быть разными.

  1. WSGIPythonPath не может быть назначен внутри virt. Раздел хостов. Вам необходимо указать эквивалентный путь в файле wsgi.py каждого из ваших приложений:
    sys.path.append('D:/........../xxxxx_project/xxxxx')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'xxxxx.settings'
    application = get_wsgi_application()