Рейтинг:1

Почему Apache с mod_wsgi принудительно загружает файлы .py вместо их выполнения?

флаг gb

Почему 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
asktyagi avatar
флаг in
У вас есть запись с RemoveHandler?
Рейтинг:-1
флаг vn

WSGIScriptAlias не предоставляет способ щелкнуть и просмотреть сервис для python, вы должны использовать свой маршрут (путь), определенный python, для доступа к вашему приложению. Открытые ссылки на .py файлы могут проходить через службу статических файлов вместо WSGI.

потому что вы монтируете свое приложение WSGI в корень, попробуй открыть / вместо /контакт чтобы увидеть, если это работает.

BlueDogRanch avatar
флаг gb
Я уже использую `WSGIScriptAlias/` вместо `WSGIScriptAlias/contact`
Chino Chang avatar
флаг vn
@BlueDogRanch, попробуйте открыть `/` в своем браузере вместо открытия `/contact`

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.