Почему Apache с mod_wsgi принудительно загружает файлы .py вместо их выполнения?
Я пытаюсь запустить Django, но первая проблема, с которой я столкнулся, это то, что файлы .py не выполняются.
Я слежу за документами здесь https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/modwsgi/
- Я использую Ubuntu 20.04.3 LTS.
- libapache2-mod-wsgi-py3 установлен и включен
конфигурационный тест apachectl
Синтаксис ОК
- Все файлы
www-данные: www-данные
- .py файлы
чмод + х
/var/журнал/apache2/access.log
пустой
/var/журнал/apache2/error.log
содержит:
Apache/2.4.41 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.1.1k mod_wsgi/4.6.8
Настроен Python/3.8 - возобновление нормальной работы
Файл .htaccess в корне имеет
RewriteEngine включен
Подпись сервера выключена
Каталог /var/www/html/example.com/public_html таков:
Это то, что я вижу; щелчок по файлу .py приводит к его загрузке.
/etc/apache2/сайты-доступны/по умолчанию-ssl.conf:
<IfModule mod_ssl.c>
<Виртуальный хост _default_:443>
Веб-мастер администратора сервера@localhost
Корень документа /var/www/html
Журнал ошибок ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log вместе
SSLEngine включен
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Каталог /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Каталог>
Псевдоним /static /var/www/html/example.com/public_html/contact/static
Псевдоним /media /var/www/html/example.com/public_html/contact/media
<Каталог /var/www/html/example.com/public_html/contact/static>
Требовать все предоставленные
</Каталог>
<Каталог /var/www/html/example.com/public_html/contact/media>
Требовать все предоставленные
</Каталог>
WSGIScriptAlias //var/www/html/example.com/public_html/contact/contact/wsgi.py
WSGIDaemonProcess example.com python-home=/var/www/html/example.com/public_html/contact
Пример WSGIProcessGroup.com
WSGISocketPrefix запустить/wsgi
<Каталог /var/www/html/example.com/public_html/contact/contact>
<Файлы wsgi.py>
Требовать все предоставленные
</файлы>
</Каталог>
<Каталог /var/www/html/example.com/public_html>
Аллововеррайд
Порядок разрешить, запретить
Разрешить от всех
Опции +ExecCGI
AddHandler cgi-скрипт .py
</Каталог>
</ виртуальный хост>
</ЕслиМодуль>
# vim: синтаксис=apache ts=4 sw=4 sts=4 sr noet
/etc/apache2/сайты-доступны/000-default.conf
<Виртуальный хост *:80>
Веб-мастер администратора сервера@localhost
Корень документа /var/www/html
Журнал ошибок ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log вместе
# Разрешить файлы .htaccess
<Каталог /var/www/html>
Опционы Индексы FollowSymLinks MultiViews
Разрешить переопределить все
Требовать все предоставленные
</Каталог>
Псевдоним /static /var/www/html/example.com/public_html/contact/static
Псевдоним /media /var/www/html/example.com/public_html/contact/media
<Каталог /var/www/html/example.com/public_html/contact/static>
Требовать все предоставленные
</Каталог>
<Каталог /var/www/html/example.com/public_html/contact/media>
Требовать все предоставленные
</Каталог>
WSGIScriptAlias //var/www/html/example.com/public_html/contact/contact/wsgi.py
WSGIDaemonProcess example.com python-home=/var/www/html/example.com/public_html/contact
Пример WSGIProcessGroup.com
WSGISocketPrefix запустить/wsgi
<Каталог /var/www/html/example.com/public_html/contact/contact>
<Файлы wsgi.py>
Требовать все предоставленные
</файлы>
</Каталог>
<Каталог /var/www/html/example.com/public_html>
Аллововеррайд
Порядок разрешить, запретить
Разрешить от всех
Опции +ExecCGI
AddHandler cgi-скрипт .py
</Каталог>
</ виртуальный хост>
# vim: синтаксис=apache ts=4 sw=4 sts=4 sr noet