У меня есть скрипт python (python.py), расположенный в папке / var / www / html / Python.
Скрипт сохраняет некоторые изображения в другой каталог (/ var / www / html / Data)
У меня есть разрешение файла -x для скрипта python.py и разрешение -rw для всех файлов, в которых сохраняется вывод.
Я использую apache2 версии 2.4
Вот как выглядит мой файл apache2.conf:
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
</Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FileMatch>
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
Поскольку я использую версию 2.4, мой cgi conf находится по адресу: /ect/apache2/conf-available/serve-cgi-bin.conf
Выглядит это так:
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
ScriptAlias /cgi-bin/ /var/www/html/Python
<IfDefine ENABLE_USR_LIB_CGI_BIN>
Define ENABLE_USR_LIB_CGI_BIN
</IfDefine>
<Directory "var/www/html/Python">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AddHandler cgi-script .py
AddHandler default-handler .html.htm
</Directory>
</IfModule>
Я включил модуль cgi, выполнив команду
sudo a2enmod cgi
и перезапустили сервер, используя
перезапуск службы apache2
Однако, несмотря на все это, мой сценарий Python по-прежнему не выполняется и отображается в виде текстового файла.
Кто-нибудь может мне помочь? Я не могу понять, что делаю не так.
Если это проблема с разрешениями, возможно, разрешения слишком мягкие. Я знаю, что Sendmail откажется принимать определенные файлы конфигурации, если они доступны для записи; Я не удивлюсь, обнаружив, что то же самое можно сказать и об Apache. Убедитесь, что у пользователя Apache нет разрешения на запись файла .conf.
Глупый вопрос: у вас есть жесткая ссылка на /etc/apache2/conf-available/serve-cgi-bin.conf
в каталоге /etc/apache2/conf-enabled
?
Изменить: чтобы создать ссылку, вы в командной строке измените на /etc/apache2/conf-enabled
каталог и введите
ln /etc/apache2/conf-available/serve-cgi-bin.conf serve-cgi-bin.conf
Возможно, вам придется выполнить sudo эту команду, если у вас нет прав на создание файлов в этом каталоге. Конечно, после создания этой ссылки вам придется перезапустить apache.