配置apache

我以前web开发基本都是基于java平台的,比如tomcat,servlet等等,由tomcat接收http请求,然后交给servlet处理,servlet处理完成以后把返回结果交给tomcat,由tomcat返回给客户端,这次学习python CGI的时候首先想到的是CGI的圆形原理是什么,怎么处理一次完整的http请求?过程如下:

  1. 客户端发起http请求
  2. apache接收http请求
  3. apache(必须加载了对应的处理模块,如处理python的mod_cgid.so)交给编写好的python脚本处理
  4. python脚本接受参数并输出一个http页面
  5. apache将这些输出返回给客户端

和我们熟悉的servlet处理相比是相当类似的,但是还有两个问题没有解决:

  • tomcat和apache的区别是什么?
  • apache怎么知道把请求交给python处理(即apache的配置)

 tomcat和apache的区别

在此不进行复杂的比较,在此列中我只需要知道:

  1. apache是一个高效的http静态服务器,用来处理静态页面的请求(如果需要处理动态请求需要加载对应模块,比如php,perl)
  2. tomcat是一个java应用服务器,可以处理静态请求,也可以处理servlet

配置apache可以处理pyton脚本

  1. 首先安装apache2自不必说,目前大多数linux发行版应该自带了apache2
  2. 配置apache2.conf(有些可能是httpd.conf,可以使用locate定位该文件的位置),修改如下
# apache2.conf配置

# 加载处理python cgi的模块,必须有
LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
# 一定要注意配置的服务器根目录是是什么,我的是/var/www
# 告诉apache2访问
/cgi-bin/的时候去 /var/www/cgi-bin/找脚本,注意要有'/' ScriptAlias /cgi-bin/ /var/www/cgi-bin/ # 对python脚本所在目录进行配置 <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all AddHandler cgi-script cgi </Directory> # 识别cgi脚本后缀 AddHandler cgi-script .cgi .py

测试配置

好的姿势都摆好了,可以写一个示例试试配置是否成功。

编写一个python脚本

在/var/www/cgi-bin/目录下新建一个test.py

#!/usr/bin/env python
# -*- coding=utf-8 -*-

import cgi
import cgitb;
cgitb.enable()

print "Content-type:text/html"
print    # 注意此处必须加print打印出一个空行,否则CGI无法解析
print """<HTML>
<HEAD>
<TITLE>CGI Environment</TITLE>
</HEAD>
<BODY>"""
cgi.print_environ()
print "</BODY></HTML>"

修改脚本权限

# 特别注意我使用root用户直接登陆的,此处为了简单起见使用了777,在实际配置重中这是非常不安全的
chmod 777 test.py

启动apache 服务

# 有些可能是httpd
service apache2 start

在浏览器中查看页面

在浏览器中输入:localhost/cgi-bin/test.py

看到下面内容(只要有内容就行,具体内容不一定一样)说明配置成功了

Shell Environment:

CONTEXT_DOCUMENT_ROOT
    /var/www/cgi-bin/ 
CONTEXT_PREFIX
    /cgi-bin/ 
DOCUMENT_ROOT
    /var/www/html 
....(此处为省略的内容)
    ::1 
SERVER_ADMIN
    webmaster@localhost 
SERVER_NAME
    localhost 
SERVER_PORT
    80 
SERVER_PROTOCOL
    HTTP/1.1 
SERVER_SIGNATURE
    <address>Apache/2.4.10 (Debian) Server at localhost Port 80</address> 
SERVER_SOFTWARE
    Apache/2.4.10 (Debian) 
View Code

相关文章: