我是新手,所以我看了一些教程。 我有一个python脚本 first.py
#!/usr/bin/python3
print "Content-type: text/html\n"
print "Hello, world!"
我的计算机上有多个版本的python。 我无法弄清楚我的cgi启用目录,所以我将这个代码粘贴在三个地方
/usr/lib/cgi-bin/first.py
/usr/lib/cups/cgi-bin/first.py
/var/www/html/first.py
现在,当我在终端中运行此代码时,它工作正常,但是当我输入
时 curl http://localhost/first.py
它只吐出简单的文字而不执行。
我已将所有权限授予first.py
我已通过命令
启用并启动了服务器 a2enmod cgi
systemctl restart apache2
请告诉我该如何执行以及这里发生了什么? 提前谢谢。
答案 0 :(得分:2)
在 Ubuntu 上的 apache2 服务器 上python cgi 脚本(在 Ubuntu 20.04 上测试)从头开始,按照这些步骤(预计 python 已安装并运行良好)。
安装 apache2 服务器。
sudo apt install apache2
启用 CGI 模块。
sudo a2enmod cgi
这里我们设置 /var/www/cgi-bin/
为 cgi-bin 目录。如果您想要不同的目录,请适当更改文件。
通过,
打开 Apache 服务器配置文件 [/etc/apache2/apache2.conf
]
sudo gedit /etc/apache2/apache2.conf
然后到文件末尾。
######### Adding capaility to run CGI-scripts #################
ServerName localhost
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Options +ExecCGI
AddHandler cgi-script .cgi .pl .py
打开文件/etc/apache2/conf-available/serve-cgi-bin.conf
,
sudo gedit /etc/apache2/conf-available/serve-cgi-bin.conf
换行:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
致:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin/">
AllowOverride None
Options +ExecCGI
</Directory>
现在重启apache2服务器,
sudo service apache2 restart
现在创建 python 脚本说,first.py 在目录中
/var/www/cgi-bin/
由,
sudo gedit /var/www/cgi-bin/first.py
并添加以下示例代码:
#!/usr/bin/env python
import cgitb
cgitb.enable()
print("Content-Type: text/html;charset=utf-8")
print ("Content-type:text/html\r\n")
print("<H1> Hello, From python server :) </H1>")
并通过以下方式授予 first.py 可执行权限,
sudo chmod +x /var/www/cgi-bin/first.py
现在 curl
会起作用。
:~$ curl http://localhost/cgi-bin/first.py
<H1> Hello, From python server :) </H1>
或者打开浏览器浏览http://localhost/cgi-bin/first.py。这应该可以工作,并将显示显示“Hello, From python server :)”的网页。
希望它有帮助...快乐编码:)
答案 1 :(得分:1)
这些行必须位于您的apache2站点配置文件中
(例如/etc/apache2/sites-available/default-ssl.conf
如果您的网站使用HTTPS):
<Directory /var/www/yoursite/yourdir/>
Options +ExecCGI
PassEnv LANG
AddHandler cgi-script .py
</Directory>
将它们添加到您想要的目录中,然后重新启动apache2。您可能还需要添加
AddHandler python-program .py
到你的httpd.conf,如果不存在的话。
有关python脚本和apache2的更详细讨论,请参见:Executing a Python script in Apache2。
答案 2 :(得分:0)
可能是您在Python 3中运行的问题,您的代码是用Python 2编写的 将标题更改为python2:
#!/usr/bin/python
print "Content-type: text/html\n"
print "Hello, world!"