配置 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
我已经研究了错误并为该文件提供了适当的权限,但它不起作用。
如有任何帮助,我们将不胜感激。提前致谢。
我做了进一步的改变。
- 我在 crunchworld.conf 文件中添加了
AddHandler cgi-script .cgi .py
。
2.I 已授予文件权限 hello.py
- 我在
/etc/apache2/conf-enabled
中建立了符号链接 /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) 和内容本身之间至少留一个空行。
更新:
要进一步排除故障,请执行以下操作:
- 确保您的 CGI 脚本设置了正确的权限:
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
.
- 如果您对 apache 配置进行了任何更改,请始终记得 重新启动 apache:例如
sudo service apache2 restart
.
- 检查你的 hashbang 行是否正确。
/usr/bin/python2.7
存在吗?您可以尝试设置为 #!/usr/bin/env python
或 #!/usr/bin/env python2
。 (或者更好的是,如果可能,在您的系统上切换到 python3
)。
- 再次检查apache错误日志。例如。
tail -20 /var/log/apache2/error.log
(或您的日志所在的任何位置)。
- 您可以尝试使用
cgitb
模块进行进一步调试(参见 https://docs.python.org/3/library/cgitb.html)。
我一直在尝试使用 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
我已经研究了错误并为该文件提供了适当的权限,但它不起作用。
如有任何帮助,我们将不胜感激。提前致谢。
我做了进一步的改变。
- 我在 crunchworld.conf 文件中添加了
AddHandler cgi-script .cgi .py
。
2.I 已授予文件权限 hello.py
- 我在
/etc/apache2/conf-enabled
中建立了符号链接
/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) 和内容本身之间至少留一个空行。
更新:
要进一步排除故障,请执行以下操作:
- 确保您的 CGI 脚本设置了正确的权限:
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
. - 如果您对 apache 配置进行了任何更改,请始终记得 重新启动 apache:例如
sudo service apache2 restart
. - 检查你的 hashbang 行是否正确。
/usr/bin/python2.7
存在吗?您可以尝试设置为#!/usr/bin/env python
或#!/usr/bin/env python2
。 (或者更好的是,如果可能,在您的系统上切换到python3
)。 - 再次检查apache错误日志。例如。
tail -20 /var/log/apache2/error.log
(或您的日志所在的任何位置)。 - 您可以尝试使用
cgitb
模块进行进一步调试(参见 https://docs.python.org/3/library/cgitb.html)。