如何在Ubuntu 16.04上的apache2服务器上运行python cgi脚本?

时间:2017-07-02 13:06:53

标签: python ubuntu apache2 cgi server-side-scripting

我是新手,所以我看了一些教程。 我有一个python脚本 first.py

#!/usr/bin/python3 print "Content-type: text/html\n" print "Hello, world!"

我的计算机上有多个版本的python。 我无法弄清楚我的cgi启用目录,所以我将这个代码粘贴在三个地方

  1. /usr/lib/cgi-bin/first.py

  2. /usr/lib/cups/cgi-bin/first.py

  3. /var/www/html/first.py

  4. 现在,当我在终端中运行此代码时,它工作正常,但是当我输入

    curl http://localhost/first.py

    它只吐出简单的文字而不执行。

    我已将所有权限授予first.py

    我已通过命令

    启用并启动了服务器

    a2enmod cgi systemctl restart apache2

    请告诉我该如何执行以及这里发生了什么? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

Ubuntu 上的 apache2 服务器python cgi 脚本(在 Ubuntu 20.04 上测试)从头开始,按照这些步骤(预计 python 已安装并运行良好)。

  1. 安装 apache2 服务器。

    sudo apt install apache2
    
  2. 启用 CGI 模块。

    sudo a2enmod cgi
    
<块引用>

这里我们设置 /var/www/cgi-bin/ 为 cgi-bin 目录。如果您想要不同的目录,请适当更改文件。

  1. 通过,

    打开 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
    
  2. 打开文件/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>
    
  3. 现在重启apache2服务器,

    sudo service apache2 restart
    
  4. 现在创建 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!"
相关问题