阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu 15.10下Python+Apache+CGI完全配置

412次阅读
没有评论

共计 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” 显示出来了:

Ubuntu 15.10 下 Python+Apache+CGI 完全配置

    这样的话,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/confsudo /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_pychmod 755 hello.py
xpleaf@leaf:~/Source_Code/cgi_for_pyls -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 脚本文件了:

Ubuntu 15.10 下 Python+Apache+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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7464字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7984714
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...