Я пытался запустить простой скрипт 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
Я исследовал ошибку и дал соответствующие разрешения для файла, но это не работает.
Любая помощь будет очень признательна. Заранее спасибо.
Дальнейшие изменения, которые я сделал.
AddHandler cgi-script .cgi .py
в свой файл crunchworld.conf.2. Я дал разрешение на файл hello.py
/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.
Ваш сценарий CGI также должен выводить информацию заголовка.
Минимально необходимым является заголовок Content-type
, который в этом случае должен быть установлен на text/html
.
Добавьте это в начало вашего CGI-скрипта (до того, как вы напечатаете что-либо еще).
print 'Content-type: text/html\n'
Обратите внимание на дополнительную завершающую новую строку — необходимо оставить хотя бы одну пустую строку между заголовком (заголовками) и самим содержимым.
Обновлять:
Для дальнейшего устранения неполадок выполните следующие действия:
chmod 0755 hello.py
просто для уверенности..py
, тогда как ваша конфигурация apache указывает только .cgi
файлы. Ваш AddHandler
должен быть AddHandler cgi-script .cgi .py
./etc/apache2/conf-available/crunchworld.conf
в /etc/apache2/conf-enabled
, если вы еще этого не сделали. Сделайте это, запустив следующее: cd /etc/apache2/conf-enabled; sudo ln -s ../conf-available/crunchworld.conf
.sudo service apache2 restart
./usr/bin/python2.7
существует? Вместо этого вы можете попробовать установить #!/usr/bin/env python
или #!/usr/bin/env python2
. (Или, что еще лучше, переключитесь на python3
, если это возможно в вашей системе).tail -20 /var/log/apache2/error.log
(или там, где ваши журналы).cgitb
(см. https://docs.python.org/3/library/cgitb.html).@avinash-babu Я добавил в свой ответ еще несколько шагов по отладке, которые могут вам помочь. Если ваша проблема не устранена, пожалуйста, отредактируйте свой вопрос, указав подробные сведения о выполненных вами шагах, а также точную информацию журнала или найденные ошибки. Удачи!
Спасибо за вашу помощь до сих пор. Но он все еще показывает ту же ошибку с локального хоста. Я отредактировал свой вопрос, как вы сказали.
Это работает, когда вы запускаете его напрямую из командной строки: ./hello.py
? Кроме того, что показывает ls -ld . hello.py
?
-rwxr-xr-x 1 avinash avinash 264 20 декабря 13:35 hello.py (результат ls -ld hello.py)
А других строк ошибок в логе апача нет? Кроме того, apache будет запускать его так: ./hello.py
, поэтому проверьте, работает ли он, запустив его таким образом, только ./
впереди — что будет использовать интерпретатор в строке хеш-мешка.
когда я запускаю /hello.py, он дает мне /usr/bin/env: 'python': такого файла или каталога нет. Я запускаю скрипты python как python2.7 <filename>.. Думаю, это может быть проблемой.. Что мне делать в этом случае, чтобы заставить его работать??.. Должен ли я установить python на /usr/bin/env?..Спасибо за вашу помощь до сих пор
Я не знаю, где в вашей системе установлен ваш Python; вместо этого он может быть в /usr/local/bin
. Запустите which python2
и which python2.7
, чтобы получить подходящую (Python 2) версию.
Я уже пробовал это раньше и добавил путь (/usr/bin/python2.7) в файл hello,py как #!/usr/bin/python2.7.. но все равно это не работает
я добавил его, но это не решило проблему .. Все еще показывает внутреннюю ошибку сервера!