Python+Apache+CGI完全配置
http://www.tuicool.com/articles/jIZfaqQ
操作系统环境: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
第一步:解包
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 from http://pcre.org/
所以如果你也出现了这样的情况,请先下载安装pcre。
下载地址: http://sourceforge.net/projects/pcre/files/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.
下载地址: http://httpd.apache.org/download.cgi
我下载的版本是: 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行:
<Directory />
AllowOverride none
Require all denied
</Directory>
将上面的内容全部修改为下面的内容:
<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
(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 '<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
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+Apache+CGI完全配置的更多相关文章
- linux Apache CGI 安装配置
Apache 中的提交了一种利用扩展应用程序执行动态网页的机制. 称为Common Gateway Interface (通用网关接口)简称CGI. 本文假定已安装好linux(本文的linux版本为 ...
- windows Apache+cgi的配置方法
1. 配置config line 119 :打开#LoadModule rewrite_module modules/mod_rewrite.so line 192 :<Directory / ...
- Linux Python apache的cgi配置
一.找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改 1.加载cgi模块 去掉注释: LoadModule cgid_module m ...
- 搭建简易的c语言与python语言CGI和Apache服务器的开发环境
搭建简易的c语言CGI和Apache服务器的开发环境 http://www.cnblogs.com/tt-0411/archive/2011/11/21/2257203.html python配置ap ...
- Python实现CGI环境
要想安装Python的CGI环境,就继续往下看吧. 首先,要确定apache服务可以使用CGI服务. 打开apache的配置文件,设置如图. 在启动的apache服务的系统目录下,创建目录如/User ...
- Python的CGI编程实现-通过接口运行服务器py脚本
yum 安装apcche [apache]yum 安装Apache(Centos 6.9) https://www.cnblogs.com/lauren1003/p/5993654.html只需一行命 ...
- windows下PHP与Apache的安装配置
1.下载安装apache:官网 http://httpd.apache.org/download.cgi#apache24 下载httpd-2.2.25-win32-x86-no_ssl.msi并安装 ...
- nginx 反向代理 与 Apache backend的配置联合配置
nginx 反向代理 与 Apache backend的配置联合配置: 说明: nginx 将http映射到Apache上的特定子目录. 配置方法步骤: 1. 设置域名, 子域名映射到指定服务器ip ...
- Windows下Apache+mod_python+Django配置
Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...
随机推荐
- Centos---linux配置 集群搭建
网络配置 1.创建虚拟机mini1: 1.1.网络配置 NAT网络模式模式 直接修改 /etc/sysconfig/network-script/ifcfg-eth0 输入service netwo ...
- openstack ocata版(脚本)控制节点安装
一.初始化环境: 1.更换yum源: yum install -y wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...
- 字典树 trie树 学习
一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种 二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...
- 011_用eclipse打开hadoop1.2.1源码出现The method getSplits(JobConf, int) is undefined for the type Object错误
出现的错误截图: 此时Eclipse使用的jdk1.8,将编译环境改成jdk1.7就行了,解决. 没问题了. 下面观点是参考如下网址,未经验证.参考:http://blog.csdn.net/onei ...
- 正则表达式----grep
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. grep [参数] 匹配条件 路径 参数 : -n :显示行号 ...
- Mysql主从复制原理详解
一.为什么要做主从同步 1.读写分离,降低对主数据库的IO消耗 2.避免数据丢失 3.提高业务系统性能 二.主从同步和集群的区别 1.主从同步 一般需要两台及以上数据库服务器即可(一台用于写入数据,一 ...
- Kubernetes 待学习列表
1.EFK or ELK https://blog.csdn.net/mawming/article/details/78344939, https://www.jianshu.com/p/fe3ac ...
- Elasticsearch6.4.3安装
Linux内存一定要1g以上! 首先要有jdk环境 要求1.8版本以上 elasticsearch是Java写的 将上传的 elasticSearch安装包解压 cd /home/elastics ...
- setup in xunit
https://xunit.github.io/docs/shared-context Shared Context between Tests It is common for unit test ...
- Luogu-3878 [TJOI2010]分金币
这题和在我长郡考试时的一道题思路差不多...考虑折半搜索,预处理左半边选的方案所产生的数量差值\(x\)以及价值差值\(y\),把\(y\)扔到下标为\(x\)的set里面,然后在搜索右半边,每搜出一 ...