想法很简单,就是让apache支持python,我搭配的环境:
$ uname -a
Linux kubt 3.2.0-27-generic-pae #43-Ubuntu SMP Fri Jul 6 15:06:05 UTC 2012 i686 athlon i386 GNU/Linux
$ python --version
Python 2.7.3
$ apache2 -version
Server version: Apache/2.2.22 (Ubuntu)
Server built: Nov 8 2012 21:37:45
1, 下载 http://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi-3.4.tar.gz
2,解压后运行:
$./configure
此处需要apache2-dev包,如果没有,将会有错误:
checking for apxs2... no
checking for apxs... no
checking Apache version... ./configure: line 1704: apxs: command not found
安装 apache2-dev包(有些系统叫"apache2-worker-dev" 或 "apache2-prefork-dev“,我的ubuntu叫"apache2-threaded-dev"):
$ sudo apt-get install apache2-threaded-dev
据说还需要python-dev包,不过我的系统好像已经装过了,这些依赖项准备好之后:
sudo make
sudo make install
接着需要对apache进行配置:
在目录 /etc/apache2/mods-available下创建文件:wsgi.load
里面的内容是:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
在目录 /etc/apache2/mods-available下创建文件:wsgi.conf
里面的内容是:
#注意这里是 mod_wsgi.c
<IfModule mod_wsgi.c>
WSGIScriptAlias /lab/py/ /usr/local/cgi-bin/pyscript/
<Directory /usr/local/cgi-bin/pyscript>
Order allow,deny
Allow from all
</Directory>
AddType text/html .py
</IfModule>
注意这里的/usr/local/cgi-bin/pyscript/ 是用来放你的python脚本的实际地址,而/lab/py/是别名,这两个可以根据你自己的实际情况自己更改,
这里是通过 localhost/lab/py/xxx.py 来访问 实际上的/usr/local/cgi-bin/pyscript/xxx.py
这样脚本必须放在/usr/local/cgi-bin/pyscript/这个目录才能正确执行。
然后把 /etc/apache2/mods-available 下的这两个文件软链接到 /etc/apache2/mods-enabled:
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/wsgi.load wsgi.load
sudo ln -s ../mods-available/wsgi.conf wsgi.conf
sudo chmod u=rwx,og=rwx wsgi.*
重启apache:
$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2
... waiting [ OK ]
然后你可以在
/usr/local/cgi-bin/pyscript/
建立一个test.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def application(environ, start_response):
status = '200 OK'
content_type = 'text/html'
output = ['Hello python!']
response_headers = [('Content-type', content_type)]
start_response(status, response_headers)
return output
给予test.py执行的权限,然后在浏览器输入:
http://localhost/lab/py/test.py
测试一下。