Python+Apache+CGI完全配置

简介:

操作系统环境:Ubuntu 15.10


0.需求原因

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




1.Apache安装

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


(1)apr安装

下载地址:http://apr.apache.org/

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


第一步:解包

1
2
3
4
5
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检测和设置编译选项

1
2
3
4
5
6
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

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


第三步:编译和安装

1
2
3
4
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的安装目录

1
2
3
4
5
6
7
8
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的安装目录:

1
2
xpleaf@leaf:~/下载 /apr-util-1 .5.4$  whereis  apr
apr:  /usr/local/apr

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

1
2
3
4
5
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:

1
2
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。

    下载地址:http://sourceforge.net/projects/pcre/files/pcre/

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

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

1
2
3
4
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.

    下载地址:http://httpd.apache.org/download.cgi

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


a.安装    

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

1
2
3
4
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,你也可以通过下面的方式来查看它的安装目录:

1
2
xpleaf@leaf:~$  whereis  apache2
apache2:  /usr/local/apache2

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


c.无法启动的解决方案

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

1
2
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没有找到它而已,查看一下:

1
2
3
4
5
6
7
8
9
10
11
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目录就可以了:

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


    下面再启动试试:

1
2
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"显示出来了:

wKiom1at1VTBgtMmAABATmQh2Tw856.png

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




2.CGI配置


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

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


(1)加载cgi模块
    大概在httpd.conf的137行:

1
#LoadModule cgid_module modules/mod_cgid.so

    去掉注释:

1
LoadModule cgid_module modules /mod_cgid .so


(2)设置cgi脚本文件路径
    大概在httpd.conf的329行:

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

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

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

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

(3)设置cgi路径的访问权限
    大概在httpd.conf195行:

1
2
3
4
<Directory />
     AllowOverride none
     Require all denied
< /Directory >

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

1
2
3
4
5
6
<Directory  "/home/xpleaf/Source_Code/cgi_for_py/" >
    AllowOverride None
    Options +ExecCGI
    Order allow,deny
    Allow from all
< /Directory >

    注意这里的目录是修改为前面我们改的:/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行:

1
#AddHandler cgi-script .cgi

    去掉注释,将其修改为:

1
AddHandler cgi-script .cgi .py

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


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

1
2
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
print  "Content-type:text/html"
print
print  '<html>'
print  '<head>'
print  '<title>Hello</title>'
print  '</head>'
print  '<body>'
print  '<h2>Hello Word! This is my first CGI program</h2>'
print  '</body>'
print  '</html>'

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


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

1
2
3
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.py127.0.0.1/cgi-bin/hello.py就可以访问我们的cgi脚本文件了:

wKiom1at7Oax8tTAAABSYQp4NKw324.png    终于可以了!



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

    希望帮到有需要的朋友。

相关文章
|
25天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
205 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
11天前
|
安全 网络安全 数据安全/隐私保护
|
1月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
190 1
|
30天前
|
存储 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
38 1
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
|
13天前
|
数据处理 Apache 数据库
将 Python UDF 部署到 Apache IoTDB 的详细步骤与注意事项
【10月更文挑战第21天】将 Python UDF 部署到 Apache IoTDB 中需要一系列的步骤和注意事项。通过仔细的准备、正确的部署和测试,你可以成功地将自定义的 Python UDF 应用到 Apache IoTDB 中,为数据处理和分析提供更灵活和强大的支持。在实际操作过程中,要根据具体情况进行调整和优化,以确保实现最佳的效果。还可以结合具体的代码示例和实际部署经验,进一步深入了解和掌握这一过程。
18 2
|
27天前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
105 7
|
25天前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
207 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
25天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
296 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
30天前
|
消息中间件 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
39 2
|
30天前
|
存储 消息中间件 druid
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
74 1