500 внутренняя ошибка сервера при настройке python cgi

Я пытался запустить простой скрипт Python hello.py с CGI, но получаю 500 Internal Server Error.

Мой код на питоне.

#!/usr/bin/python2.7
print '<html>'
print '<head>'
print '<title>Hello World - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! This is my first CGI program</h2>'
print '</body>'
print '</html>'

Каталог, в котором запущен скрипт Python, находится в /var/www/crunchworld. Файл conf, который я включил, находится в `/etc/apache2/conf-available/crunchworld.conf

Файл conf выглядит так

<Directory /var/www/crunchworld>

Options +ExecCGI

AddHandler cgi-script .cgi

Options All

AllowOverride All

Order allow,deny

Allow from all

</Directory>

У меня включен cgi и предоставлено необходимое разрешение для файла hello.py, но он все еще показывает мне внутреннюю ошибку сервера. Когда я проверил журналы, я вижу

Конец вывода скрипта перед заголовками: hello.py

Я исследовал ошибку и дал соответствующие разрешения для файла, но это не работает.

Любая помощь будет очень признательна. Заранее спасибо.

Дальнейшие изменения, которые я сделал.

  1. Я добавил AddHandler cgi-script .cgi .py в свой файл crunchworld.conf.

2. Я дал разрешение на файл hello.py

  1. У меня есть символическая ссылка /etc/apache2/conf-available/crunchworld.conf в /etc/apache2/conf-enabled

4. Я уже установил python2.7 по пути /usr/bin/python2.7 , и я также пытался использовать #!/usr/bin/env python, но все равно это не работает.

Проверив журналы, я нашел End of script output before headers: hello.py, referer: http://localhost/

Спасибо за ваши рекомендации, но он все еще показывает внутреннюю ошибку 500.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 345
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш сценарий CGI также должен выводить информацию заголовка.

Минимально необходимым является заголовок Content-type, который в этом случае должен быть установлен на text/html.

Добавьте это в начало вашего CGI-скрипта (до того, как вы напечатаете что-либо еще).

print 'Content-type: text/html\n'

Обратите внимание на дополнительную завершающую новую строку — необходимо оставить хотя бы одну пустую строку между заголовком (заголовками) и самим содержимым.

Обновлять:

Для дальнейшего устранения неполадок выполните следующие действия:

  1. Убедитесь, что для вашего сценария CGI установлены правильные разрешения: chmod 0755 hello.py просто для уверенности.
  2. Ваш скрипт выглядит как .py, тогда как ваша конфигурация apache указывает только .cgi файлы. Ваш AddHandler должен быть AddHandler cgi-script .cgi .py.
  3. Вы должны сделать символическую ссылку на свой файл /etc/apache2/conf-available/crunchworld.conf в /etc/apache2/conf-enabled, если вы еще этого не сделали. Сделайте это, запустив следующее: cd /etc/apache2/conf-enabled; sudo ln -s ../conf-available/crunchworld.conf.
  4. Всегда не забывайте перезапускать apache, если вы вносите какие-либо изменения в конфигурацию apache: например. sudo service apache2 restart.
  5. Убедитесь, что ваша строка hashbang верна. /usr/bin/python2.7 существует? Вместо этого вы можете попробовать установить #!/usr/bin/env python или #!/usr/bin/env python2. (Или, что еще лучше, переключитесь на python3, если это возможно в вашей системе).
  6. Еще раз проверьте журналы ошибок apache. Например. tail -20 /var/log/apache2/error.log (или там, где ваши журналы).
  7. Вы можете попытаться выполнить дальнейшую отладку с помощью модуля cgitb (см. https://docs.python.org/3/library/cgitb.html).

я добавил его, но это не решило проблему .. Все еще показывает внутреннюю ошибку сервера!

Avinash Babu 19.12.2020 14:54

@avinash-babu Я добавил в свой ответ еще несколько шагов по отладке, которые могут вам помочь. Если ваша проблема не устранена, пожалуйста, отредактируйте свой вопрос, указав подробные сведения о выполненных вами шагах, а также точную информацию журнала или найденные ошибки. Удачи!

costaparas 20.12.2020 01:39

Спасибо за вашу помощь до сих пор. Но он все еще показывает ту же ошибку с локального хоста. Я отредактировал свой вопрос, как вы сказали.

Avinash Babu 20.12.2020 09:04

Это работает, когда вы запускаете его напрямую из командной строки: ./hello.py? Кроме того, что показывает ls -ld . hello.py?

costaparas 21.12.2020 07:13

-rwxr-xr-x 1 avinash avinash 264 20 декабря 13:35 hello.py (результат ls -ld hello.py)

Avinash Babu 21.12.2020 14:26

А других строк ошибок в логе апача нет? Кроме того, apache будет запускать его так: ./hello.py, поэтому проверьте, работает ли он, запустив его таким образом, только ./ впереди — что будет использовать интерпретатор в строке хеш-мешка.

costaparas 21.12.2020 14:36

когда я запускаю /hello.py, он дает мне /usr/bin/env: 'python': такого файла или каталога нет. Я запускаю скрипты python как python2.7 <filename>.. Думаю, это может быть проблемой.. Что мне делать в этом случае, чтобы заставить его работать??.. Должен ли я установить python на /usr/bin/env?..Спасибо за вашу помощь до сих пор

Avinash Babu 21.12.2020 16:22

Я не знаю, где в вашей системе установлен ваш Python; вместо этого он может быть в /usr/local/bin. Запустите which python2 и which python2.7, чтобы получить подходящую (Python 2) версию.

costaparas 21.12.2020 23:32

Я уже пробовал это раньше и добавил путь (/usr/bin/python2.7) в файл hello,py как #!/usr/bin/python2.7.. но все равно это не работает

Avinash Babu 22.12.2020 17:04

Другие вопросы по теме