操作系统环境:Ubuntu 15.10

0.需求原因

想在我的Linux上架设Apache来运行CGI程序,方便以后用Apache部署Python的Web应用,但遇到各种各样的问题,网上找的答案要么都太旧了(4/5年前跟现在已经差很多了),要么就不完整,所以这里总结一下,作为最新版本吧。

1.Apache安装

采用的是源码编译安装的形式。首先要说明的是,要成功安装Apache,需要依次安装完下面的软件(函数库)才算是成功地安装了Apache:

(1)apr安装

注意这个网站上有两个相应的软件下载,一个是apr,另外一个是下面将要安装的apr-util,由于英文名字看起来太容易混淆,所以一定要看清楚下载的是哪个。这里我下载的是:apr-1.5.2.tar.gz

第一步:解包

xpleaf@leaf:~/下载$ tar xvf apr-1.5.2.tar.gz

......

apr-1.5.2/mmap/win32/

apr-1.5.2/mmap/win32/mmap.c

apr-1.5.2/apr-config.in

第二步:运行configure检测和设置编译选项

xpleaf@leaf:~/下载/apr-1.5.2$ ./configure

......

config.status: creating include/arch/unix/apr_private.h

config.status: executing libtool commands

rm: cannot remove 'libtoolT': No such file or directory

config.status: executing default commands

正常情况下是没有问题的,如果出现问题,可以自行查找,这个好解决。

第三步:编译和安装

xpleaf@leaf:~/下载/apr-1.5.2$ make

......

xpleaf@leaf:~/下载/apr-1.5.2$ sudo make install

......

OK,这样的话,apr就安装完成了。

(2)apr-util安装

下载地址跟上面的是一样的,这里我下载的版本是:apr-util-1.5.4.tar.gz

apr-util安装的步骤跟上面的差不多,不过有一步要注意的,就是在执行./configure命令的时候需要指定apr的安装目录:

xpleaf@leaf:~/下载/apr-util-1.5.4$ ./configure

......

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

Applying apr-util hints file rules for x86_64-unknown-linux-gnu

checking for APR... no

configure: error: APR could not be located. Please use the --with-apr option.

#注意看上面的报错提示

先找到apr的安装目录:

xpleaf@leaf:~/下载/apr-util-1.5.4$ whereis apr

apr: /usr/local/apr

再添加相应参数执行apr-util的./configure命令:

xpleaf@leaf:~/下载/apr-util-1.5.4$ ./configure --with-apr=/usr/local/apr

......

config.status: creating test/Makefile

config.status: creating include/private/apu_config.h

config.status: executing default commands

这样的话预编译就算完成了,再执行下面的make和sudo make install:

xpleaf@leaf:~/下载/apr-util-1.5.4$ make

xpleaf@leaf:~/下载/apr-util-1.5.4$ sudo make install

OK,这样的话,apr-util的安装也完成了。

(3)pcre安装

这不是必需的,前提是你的系统原来已经安装了它的库,如果还没有安装的话,在你编译Apache的时候就会出现下面的错误提示:

configure: error: pcre-config for libpcre not found. PCRE is required and available fromhttp://pcre.org/

所以如果你也出现了这样的情况,请先下载安装pcre。

这里我下载的版本是:pcre-8.38.tar.gz

安装步骤跟上面的一样,而且这里也不会出现什么问题,直接给出步骤好了:

xpleaf@leaf:~/下载$ tar zxvf pcre-8.38.tar.gz

xpleaf@leaf:~/下载/pcre-8.38$ ./configure

xpleaf@leaf:~/下载/pcre-8.38$ make

xpleaf@leaf:~/下载/pcre-8.38$ sudo make install

pcre也安装完之后,下面就可以真正安装Apache了。

(4)Apache安装

在上面的三个软件安装完成之后,这下面才开始安装Apache.

我下载的版本是:httpd-2.4.18.tar.gz

a.安装

只要上面的几步完成了,安装apache就比较容易了,依次执行下面的命令就可以了。

xpleaf@leaf:~/下载$ tar zxvf httpd-2.4.18.tar.gz

xpleaf@leaf:~/下载/httpd-2.4.18$ ./configure --enable-module=shared

xpleaf@leaf:~/下载/httpd-2.4.18$ make

xpleaf@leaf:~/下载/httpd-2.4.18$ sudo make install

b.参数说明

需要注意的是,如果在执行./configure时没有指定apache的安装目录,默认是安装在/usr/local/apache2,你也可以通过下面的方式来查看它的安装目录:

xpleaf@leaf:~$ whereis apache2

apache2: /usr/local/apache2

另外,上面在执行./configure时添加了-enable-module=shared参数,即通过把模块编译成动态共享对象,让Apache启动时动态加载,这样以后需要加载新模块时,只需在配置文件中设置即可。当然,为了这样的便捷性而损失一定的性能是否值得,个人衡量。所以这个参数你不加也是没有问题的。

c.无法启动的解决方案

安装完成后,就可以启动了,因为采用的是编译安装,所以需要用下面的方式启动:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start

/usr/local/apache2/bin/httpd: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

但是你会发现又报错了,而且报的错为:无法加元libpcre.so.1库函数。

libpcre.so.1,很熟悉的名字,前面不是已经安装了?确实是安装的,只是Apache没有找到它而已,查看一下:

xpleaf@leaf:~$ ldd /usr/local/apache2/bin/httpd

linux-vdso.so.1 =>  (0x00007ffdf9fe6000)

libpcre.so.1 => not found

libaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0x00007f8192a47000)

libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0x00007f8192813000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81925f5000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f819222b000)

libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0x00007f8192002000)

libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8191dca000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8191bc6000)

/lib64/ld-linux-x86-64.so.2 (0x00005637a587b000)

这时我们把pcre对应的该库函数软件链接到/lib目录就可以了:

xpleaf@leaf:~$ sudo ln -s /usr/local/lib/libpcre.so.1 /lib

下面再启动试试:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

OK,这时再打开浏览器,经典的"It works"显示出来了:

这样的话,Apache的安装也算是完成了,下面就说说CGI的配置。

2.CGI配置

Apache支持CGI配置,下面就来详细说明配置的过程。

找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改,如下面的说明:

(1)加载cgi模块

大概在httpd.conf的137行:

#LoadModule cgid_module modules/mod_cgid.so

去掉注释:

LoadModule cgid_module modules/mod_cgid.so

(2)设置cgi脚本文件路径

大概在httpd.conf的329行:

ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

可以看到apache将"/usr/local/apache2/cgi-bin/"映射为/cgi-bin/,即当你通过浏览器访问/cgi-bin/目录时,实际上就是访问"/usr/local/apache2/cgi-bin/"目录,为了方便,我将其设置为如下:

ScriptAlias /cgi-bin/ /home/xpleaf/Source_Code/cgi_for_py/

注意这里路径末尾一定要加/,否则apache是无法打到该路径下的文件的。

(3)设置cgi路径的访问权限

大概在httpd.conf195行:

AllowOverride none

Require all denied

将上面的内容全部修改为下面的内容:

AllowOverride None

Options +ExecCGI

Order allow,deny

Allow from all

注意这里的目录是修改为前面我们改的:/home/xpleaf/Source_Code/cgi_for_py/

这样的修改是有原因的,如果没有在这里设置权限,当你在浏览器中访问你的cgi脚本文件时,得到的可能是这样的提示:

Forbidden

You don't have permission to access /cgi-bin/hello.py on this server.

(4)设置apache可解释python的cgi脚本文件

大概在httpd.conf的386行:

#AddHandler cgi-script .cgi

去掉注释,将其修改为:

AddHandler cgi-script .cgi .py

加上.py后,就可以解释python的脚本文件了,如果你需要解释shell的脚本文件,可以添加.pl,其它的类似。

OK,完成上面的4步之后,CGI配置就算完成了。不过在配置完成之后,我们需要重启一下Apache服务:

xpleaf@leaf:/usr/local/apache2/conf$ sudo /usr/local/apache2/bin/apachectl restart

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

3.添加CGI脚本文件

(1)创建cgi脚本文件

在/home/xpleaf/Source_Code/cgi_for_py/目录下添加下面一个文件,并命名为hello.py:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

print "Content-type:text/html"

print

print ''

print '

'

print '

Hello'

print ''

print '

'

print '

Hello Word! This is my first CGI program

'

print ''

print ''

注意#!/usr/bin/env python一定要加上,否则会出现500错误提示。

(2)设置cgi脚本文件的文件权限为755

xpleaf@leaf:~/Source_Code/cgi_for_py$ chmod 755 hello.py

xpleaf@leaf:~/Source_Code/cgi_for_py$ ls -l hello.py

-rwxr-xr-x 1 xpleaf xpleaf 289  1月 31 16:02 hello.py

此步非常非常重要,如果忘记这步,无论你怎么找配置文件也找不出错误,就算看代码也不会发现有错误,然后通过浏览器访问时会一直显示500错误,所以一定要记得该步操作!

4.通过浏览器访问cgi脚本文件

直接在浏览器中输入localhost/cgi-bin/hello.py或127.0.0.1/cgi-bin/hello.py就可以访问我们的cgi脚本文件了:

    终于可以了!

Ok,那么到这里就结束了,如果是完全按照上面的操作来进行的话,相信是不会有太大的问题的,只是要注意的细节问题比较多。当然肯定不会跟我这里的情况完全一样,因为这还取决于你所使用的环境,这里我的操作系统是:Ubuntu 15.10,所以还是仅提供参考。

希望帮到有需要的朋友。

python配置cgi_Python+Apache+CGI完全配置相关推荐

  1. linux apache ip配置,linux apache虚拟主机配置(基于ip,端口,域名)

    配置环境: linux版本:Centos6.4 httpd版本: [[email protected] init.d]# pwd /etc/init.d [[email protected] init ...

  2. Windows 配置Apache+CGI

    之前在Linux下完成了Apache+CGI配置,这次在Windows环境下,我又配置了一遍,很多配置跟Linux是一样的,感觉比较简单 首先还是先在官网下载Apache,版本为Apache 2.4. ...

  3. Apache服务器+tomcat配置

    2019独角兽企业重金招聘Python工程师标准>>> 1.安装Apache服务器 1.1 Windows下安装Apache 打开Apache Server的官网,可以看到上面只提供 ...

  4. http隐藏服务器相关配置信息,apache web服务器安全配置

    尽管现在购买的云服务器很多都有一键web环境安装包,但是如果是自己配置web环境则需要对各种安全配置十分了解,今天我们就来尝试这做好web服务器安全配置.这里的配置不尽完善,若有纰漏之处还望指出. 修 ...

  5. linux trac svn,RedHat Linux5下apache+svn+trac配置手册(二)

    接(一) D.安装Genshi 解压 trac# tar -zxvf Genshi-0.6.tar.gz 安装 trac#cd Genshi-0.6 Genshi-0.6# python setup. ...

  6. apache的基本配置和动态页面配置

    文章目录 Apache 了解Apache的基本配置 配置文件的功能介绍 编辑http的配置文件:`vi /etc/httpd/conf/httpd.conf` 查看监听的默认端口:`netstat – ...

  7. Apache中KeepAlive 配置

    引子 先来分析一个Yslow 测试的一个页面的前端性能. 这里所有的请求是指http请求,对于一个请求各个阶段的划分,阻挡->域名解析->建立连接->发送请求->等待响应-&g ...

  8. linux下apache服务器的配置和管理(启动、重启、中断服务)

    2019独角兽企业重金招聘Python工程师标准>>> linux下apache服务器的配置和管理 一.两个重要目录: Apache有两个重要的目录: 1.配置目录/etc/http ...

  9. Apache,php配置

    很多朋友想要在window下配置apache+php+mysql运行环境,其实从这么长时间的经验来看,win2003下还是用iis,如果为了学习或对apache特别熟悉的朋友可以用apache 一 准 ...

最新文章

  1. 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现
  2. java命令运行class文件提示错误:找不到或无法加载主类
  3. 数字图像处理——添加高斯噪声椒盐噪声
  4. 如何恢复Linux下被误删除的文件以及如何防止文件被删除
  5. 使用CSVDE批量导入命令/出口AD用户
  6. 直连数据库实时更新数据,比python强大,可视化报表这么做简直牛
  7. windows03系统安装08sql数据库
  8. react中创建组件
  9. 拓端tecdat|R语言用ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
  10. Flex布局应用---导航栏实现
  11. Activex 部件不能创建对象 故障解决
  12. latex 公式编号
  13. php红包退回通知,PHP红包算法类(已运用实际项目)
  14. python3*1**3 表达式输出结果为_22 % 3 表达式输出结果为________
  15. 大规模优化方法(一)
  16. Chap.6 总结《CL: An Introduction》 (Vyvyan Evans)
  17. SCI论文阅读-深度学习在测井气体红外光谱定量分析中的应用
  18. 二进制与八进制、十进制、十六进制之间的相互转换
  19. python经典好书-Python 必读好书,这十本分量十足!
  20. 智能手机的发展有多猛?

热门文章

  1. win10设置pin一直转圈_Win10 自带手机投屏功能,80% 的人居然都不知道
  2. 破解STM32F103芯片的方法
  3. ANDROID XML图像资源文件详细讲解(一)
  4. Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0
  5. 原生JavaScript实现AJAX、JSONP
  6. tf35:tf.estimator
  7. 什么是软件测试及其分类?
  8. Android蓝牙打印机,带你真正了解各种打印格式
  9. imp oracle错误3114,imp时发生错误ORA-01114
  10. 线性代数-MIT 18.06-7(a)