在linux apache 2.4上运行python3脚本

时间:2017-01-08 17:01:33

标签: python linux apache cgi

我到处寻找并尝试了许多建议的解决方案,仍然没有所需的结果:从我的灯服务器运行python文件。我似乎无法整合拼图的所有部分......复杂的故事是许多解决方案要么使用旧的apache版本(< 2.4),这会显着改变配置文件。没有更多的httpd.conf!所以这executing-a-python-script-in-apache2没有帮助;而且python版本是> 3使问题复杂化。

规格:

  • linux Kubuntu,apache 2.4,python 3.5
  • apache正在运行
  • 网站文件位于root / var / www / html /中,我有sudo访问此文件夹。
  • 启用了apache2 cgi模块:a2enmod cgi
  • python 3.5路径是usr / bin / env python3
  • python脚本,最简单的脚本,已经可以执行

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

让它归结为最简单的情况:我想让apache解释spark.py脚本并吐出html:“Hello world!”

问题:

  • 脚本文件是否正确?
  • 我需要更改哪些配置文件以及我需要添加哪些配置文件?

我知道出于安全原因,您不应该在根目录中运行apache脚本。

2 个答案:

答案 0 :(得分:2)

modwsgi的python文档似乎符合您的要求。以下网页有一个非常简单的示例和python3-apache2设置的必要配置。

http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html

您需要安装mod_wsgi才能使配置生效。请注意apt和pip3中使用的不同的“_”下划线和“ - ”短划线字符。

$ sudo apt install apache2-dev libapache2-mod-wsgi-py3
$ sudo pip3 install mod_wsgi

libapache2-mod-wsgi-py3和mod_wsgi似乎是一回事。但是,我的测试部署仅在安装mod_wsgi后才能运行。可能是配置问题。以下是我在Ubuntu 16.04.2上测试的配置的详细信息。

申请文件/home/user/wsgi_sample/hello.wsgi:

def application(environ, start_response):
    status = '200 OK'
    output = b'Hello World!'
    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

Apache2配置/etc/apache2/sites-available/000-test.conf

<VirtualHost *:80>
  ServerName testmachine
  <Directory /home/user/wsgi_sample>
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>
  WSGIScriptAlias /hello /home/user/wsgi_sample/hello.wsgi
</VirtualHost>

在apache2中启用该站点。

sudo a2ensite 000-test.conf

将浏览器打开至testmachine/hello

也可以使用乘客在Apache2上部署wsgi。它需要更轻薄的配置。如果需要乘客/ python3,请提出一个新问题。

答案 1 :(得分:0)

是的,您的最低密码似乎正确。在这里回答Apache的配置信息 https://stackoverflow.com/a/57531411/4084546