У меня есть сервер apache, перенаправляющий трафик с mysite.com/home
на мой файл wsgi.py, но когда вызывается get_wsgi_application()
, я получаю внутреннюю ошибку сервера.
Запуск apache2 на amazon linux EC2. В wsgi.py я заменил строку
application = get_wsgi_application()
с функцией,
def application(environ, start_response):
status = '200 OK'
output = b'sys.path = %s\n' % repr(sys.path).encode('UTF-8')
output += b'sys.version = %s\n' % repr(sys.version).encode('UTF-8')
output += b'sys.prefix = %s\n' % repr(sys.prefix).encode('UTF-8')
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
и ошибка сервера исчезает. Это показывает, что apache использует правильную версию Python (3.7) и не возвращает ошибку, когда я import get_wsgi_application()
из django.core.wsgi
. Насколько я понимаю, это означает, что apache очень хорошо находит точку доступа к моему проекту django, и у него есть разрешение просматривать файл и показывать его содержимое. Чего мне не хватает?
Другая, возможно, важная информация, о которой я могу подумать
Пользователь "apache" и группа "apache" владеют внешним каталогом mysite и всем, что в нем. Я установил все параметры в settings.py для производства в соответствии с контрольным списком развертывания django. https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
wsgi.py:
import os, sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
sys.path.append('/usr/local/wsgi/django')
sys.path.append('/usr/local/wsgi/django/mysite')
application = get_wsgi_application()
httpd.conf:
<VirtualHost *:80>
ServerName www.mysite.com
Redirect permanent / httpswww.mysite.com
</VirtualHost>
<VirtualHost *:443>
ServerName httpswww.mysite.com
ServerAlias mysite.com
ServerAdmin person@gmail.com
DocumentRoot "/var/www/html/efs/Website"
WSGIDaemonProcess mysite
WSGIProcessGroup mysite
WSGIScriptAlias /home /usr/local/wsgi/django/mysite/mysite/wsgi.py
<Directory "/usr/local/wsgi/django/mysite/mysite">
<Files "wsgi.py">
Require all granted
</Files>
</Directory>
SSLEngine on
SSLCertificateFile "/crt/path.crt"
SSLCertificateKeyFile "/key/path.key"
</VirtualHost>
settings.py:
SECRET_KEY = 'string_I_havent_moved_yet'
DEBUG= False
ALLOWED_HOSTS = ['www.mysite.com', e2-serial-numbers.compute-1.amazonaws.com']