配置 python cgi 时出现 500 内部服务器错误

500 internal Server error when configuring python cgi

我一直在尝试使用 CGI 运行 一个简单的 python 脚本 hello.py 但我收到 500 内部服务器错误。

我的 python 代码。

#!/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 脚本 运行ning 的目录在 /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 但它仍然向我显示内部服务器 error.When 我检查了我看到的日志

headers 之前的脚本输出结束:hello.py

我已经研究了错误并为该文件提供了适当的权限,但它不起作用。

如有任何帮助,我们将不胜感激。提前致谢。

我做了进一步的改变

  1. 我在 crunchworld.conf 文件中添加了 AddHandler cgi-script .cgi .py

2.I 已授予文件权限 hello.py

  1. 我在 /etc/apache2/conf-enabled
  2. 中建立了符号链接 /etc/apache2/conf-available/crunchworld.conf

4.I 已经在路径 /usr/bin/python2.7 上安装了 python2.7,我也尝试过使用 #!/usr/bin/env python 但它仍然不起作用。

检查日志后我发现 End of script output before headers: hello.py, referer: http://localhost/

感谢您的建议,但仍然显示 500 内部错误。

您的 CGI 脚本还必须输出 header 信息。

最低要求是 Content-type header -- 在这种情况下应设置为 text/html.

将此添加到 CGI 脚本的 start(在打印任何其他内容之前)。

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

注意额外的尾随换行符 -- 有必要在 header(s) 和内容本身之间至少留一个空行。

更新:

要进一步排除故障,请执行以下操作:

  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)。