Подтвердить что ты не робот

Проблема с запуском python script как cgi под apache (ubuntu 12)

Раскрытие информации: я много искал, и я не думаю, что на мой вопрос (для моей конфигурации) ответят здесь. Например запустить python script как cgi apache server не отвечает на него.

Итак: У меня есть самый простой способ script:

#!/usr/bin/env python

print "Content-type: text/html"
print ""

print "<h1>Hello from Python!</h1>"

Когда я запускаю его в браузере, он буквально отображает себя вместо ожидаемого Привет от Python!

Я сделал следующее для запуска:

a) он исполняется всеми; Он отлично работает в оболочке.

b) он находится в виртуальном каталоге, который имеет следующую конфигурацию (в/etc/apache2/sites-available/my_cgi_dir):

<VirtualHost *:80>
    ServerAdmin [email protected]

    DocumentRoot /var/www/
    <Directory />
           Options FollowSymLinks
           AllowOverride None
    </Directory>
   <Directory /var/www/my_cgi_dir/>
           Options Indexes +ExecCGI FollowSymLinks MultiViews
           AddHandler cgi-script .cgi .py
           AllowOverride None
          Order allow,deny
          allow from all
   </Directory>

   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
   <Directory "/usr/lib/cgi-bin">
           AllowOverride None
           Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
           Order allow,deny
           Allow from all
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   LogLevel warn
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Как вы видите, он имеет

       Options Indexes +ExecCGI FollowSymLinks MultiViews

и

       AddHandler cgi-script .cgi .py

c) Я убедился, что apache поддерживает python, запустив sudo apt-get install libapache2-mod-python

d) Да, я перезапустил apache.

Тем не менее, я просто вижу источник script вместо "Hello Python".

Что мне не хватает?

Пожалуйста, помогите.


PS: если это может помочь, вот что я запускаю:

Linux ip-172-31-37-178 3.2.0-40-virtual # 64-Ubuntu SMP Mon Mar 25 21:42:18 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Версия сервера: Apache/2.2.22 (Ubuntu)

Python 2.7.3

4b9b3361

Ответ 1

Что также может вызвать эти симптомы, так это то, что модуль apache2 cgi не загружен. Это также будет генерировать сообщение журнала в /var/log/apache2/access.log с ошибкой HTTP 304:

192.168.2.3 - - [26/Jul/2014:11:56:34 +0200] "GET /cgi-bin/hello.py HTTP/1.1" 304 179 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"

Проверьте загруженные модули с помощью

apache2ctl -M

Ищите:

cgid_module (shared)

Если он не загружен, загрузите его с помощью

a2enmod cgid

Затем перезапустите apache2:

service apache2 reload

Затем обновите браузер и очистите кеш браузера (CTRL + F5). И/или перезагрузите браузер, чтобы убедиться, что он запрашивает фактическую страницу, вместо использования кеша браузера.

Ответ 2

попробуйте это

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

cgi script

import cgi
import cgitb; cgitb.enable()
print "Content-type: text/html\n\n"
print "<h1>Hello from Python!</h1>"

Почему бы вам не настроить такую ​​функцию? здесь.

ScriptAlias /cgi-bin/ /var/www/my_cgi_dir/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

Ответ 3

В моем случае я допустил ошибку с моей директивой ScriptAlias. Я раскоментировал оригинальный, но забыл настроить новый.

Как только я правильно изменил и сохранил конфигурационный файл sites-available/default из этого:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">

.. к этому:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">

.. и перезагрузили apache2, он просто сработал: он прекратил показывать мои сценарии как текст и начал запускать их как script. Кроме того, он больше не отображает /var/www/cgi-bin как каталог в браузере, но теперь корректно отображает ошибку:

Forbidden 
You don't have permission to access /cgi-bin/ on this server.

Ответ 4

У меня была такая же проблема и я пробовал все вышеперечисленное. Ничего не помогло. В конце концов это оказалось действительно глупой ошибкой. Поскольку у многих людей есть проблемы с этим, я все равно отправлю его:

Я не привязал свой сайт по умолчанию от "sites-available" до "sites-enabled", как описано в верхней части файла apache.conf:

[...] Конфигурационные файлы в моделях с поддержкой модов и сайтах/каталогов   содержат определенные фрагменты конфигурации, которые управляют модулями или виртуальными   хост конфигураций, соответственно.

Они активируются путем ссылки на имеющиеся файлы конфигурации из их   соответствующие * -доступные/аналоги. Они должны управляться с помощью нашего   помощники a2enmod/a2dismod, a2ensite/a2dissite. Видеть   их соответствующие страницы руководства для получения подробной информации.   [...]

Таким образом, все мои изменения в файле по умолчанию не были прочитаны apache. Как только я сделал символическую ссылку, она сработала.

Ответ 5

Это сработало для меня,  как предлагалось @flyking_, выполните дополнительные шаги в том же порядке.

Мне пришлось сменить в каталоге - я использую raspberrypi (версия NOOB linux) /etc/apache 2/sites-available/default

поддерживайте те, что добавляются + ExecCGI, а также Addhander cgi- script.cgi.py, как показано ниже

<Directory /var/www/>
       Options Indexes +ExecCGI FollowSymLinks MultiViews
       AddHandler cgi-script .cgi .py
       AllowOverride None
      Order allow,deny
      allow from all

Затем перезапустите apache

service apache2 restart

Это должно перезапустить службу и проверить, работает ли python script без ошибок в терминале, прежде чем запускать его в браузере.

Если ошибок нет, то sampe script будет работать нормально.

import cgi
import cgitb; cgitb.enable()
print "Content-type: text/html\n\n"
print "<h1>Hello from Python!</h1>"

Imp: позже мой script работал отлично даже без обоих импортов.

Примечание. Очистите кеш в браузере или загрузите его заново ctrl + F5. Надеюсь, это должно решить.

Если это не решит, попробуйте это как @user2449877. Проверьте загруженные модули на:

 apache2ctl -M

Ищите:

 cgid_module (shared)

Если он не загружен, загрузите его с помощью

  a2enmod cgid    

Перезапустите apache, а затем обновите браузер

Ответ 6

В моем случае (который является общей машиной unix), мне также нужно создать скрытый файл ".htaccess" со следующим:

Options +ExecCGI
SetHandler cgi-script 

Также важно установить соответствующие разрешения (755 - группа и прочее без прав на запись, но разрешение на выполнение), а также иметь:

#!/usr/bin/python

как первая строка CGI python script.