繁体   English   中英

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

[英]How do I run python cgi script on apache2 server on Ubuntu 16.04?

我是新手,所以我看到了一些教程。 我有一个 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

现在当我在终端中运行这段代码时它工作正常但是当我输入

curl http://localhost/first.py

它只吐出简单的文本并且不执行。

我已经给了 first.py 的所有权限

我已经通过命令启用并启动了服务器

a2enmod cgi systemctl restart apache2

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

从头开始在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 这应该可以工作,并将显示显示“你好,来自 python 服务器:) ”的网页。

希望它有帮助...快乐编码:)

这些行需要在您的 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 的更详细的讨论可以在这里找到: 在 Apache2 中执行 Python 脚本

可能是您在 Python 3 中运行并且您的代码是用 Python 2 编写的问题将标题更改为 python2:

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

对于概念验证,请使用此 python 脚本; 无需输入,也无需输入 output。

#!/usr/bin/env python3
import cgitb
cgitb.enable()
outputfile = open("javascriptPython.out", "a")
outputfile.write("Hello from Python\n\n")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM