共计 7464 个字符,预计需要花费 19 分钟才能阅读完成。
操作系统环境: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 from http://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” 显示出来了:
这样的话,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.py 或127.0.0.1/cgi-bin/hello.py就可以访问我们的 cgi 脚本文件了:
终于可以了!
Ok,那么到这里就结束了,如果是完全按照上面的操作来进行的话,相信是不会有太大的问题的,只是要注意的细节问题比较多。当然肯定不会跟我这里的情况完全一样,因为这还取决于你所使用的环境,这里我的操作系统是:Ubuntu 15.10,所以还是仅提供参考。
希望帮到有需要的朋友。
Ubuntu Server 14.04 安装 Web 服务器(Linux+Apache+MySQL+PHP) http://www.linuxidc.com/Linux/2015-06/119061.htm
Linux 下安装配置 PHP 环境(Apache2) http://www.linuxidc.com/Linux/2015-05/118062.htm
Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm
RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm
Apache 的详细介绍:请点这里
Apache 的下载地址:请点这里
更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128117.htm