Windows 서버용 VirtualHost에 WSGIPython 경로를 어떻게 추가해야합니까?

Nov 19 2020

나는 추가하려고 WSGIPythonPathVirtualHost있지만, 그것은 나에게 오류를 던지고 :

/etc/httpd/conf/httpd.conf의 549 행에 구문 오류가 있습니다.

WSGIPythonPath는 섹션 내에서 발생할 수 없습니다.

다음과 같이 해결하려고 했습니다. 내 virtualenv에서 WSGIPythonPath가 어디를 가리켜 야합니까?

그러나, 더 연구에, 그 발견 WSGIDaemonProcessWSGIProcessGroup에 따라 Windows에서 지원되지 않는 이유는 WSGIDaemonProcess 것은 Windows에서 사용할 수 없습니다? .

따라서 WSGIPythonPathApache24 서버에서 여러 Django 사이트를 호스팅 할 수 있도록 어떻게 추가해야 하며 어디에 추가해야 합니다.

어떤 도움이라도 도움이 될 것입니다.

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

나는 두 가지 미덕을 세우는 데 어려움을 겪었습니다. Windows에서 Apache mod_wsgi를 사용하는 호스트. 따라서 여기의 솔루션은 Apache / mod_wsgi 및 Windows 용입니다.

일반적으로 Windows와 Unix에 대해 Apache / mod_wsgi를 분리하는 것은 매우 어렵습니다. 많은 기사에서 두 가지가 혼합되어 있거나 어떤 항목이 언급되고 있는지 명확하게 언급되지 않았기 때문입니다.

  1. Windows 용 Apache / mod_wsgi에서는 WSGIDaemonProcess / WSGIProcessGroup을 사용할 수 없기 때문에 httpd-vhosts.conf에있는 virt 호스트 정의의 중요한 부분이 있습니다.
   <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의 표준 동작으로 자신의 "스레드"를 가져야하기 때문에 다소 심각한 버그입니다. Btw 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()