实验环境说明:在物理机acer4739Z+ubuntu12.04以及虚拟机Win7+Wmware+ubuntu14.04都做过测试。
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令;2 从源码构建Apache。本文章将详细描述这两种不同的安装方式。
1 apt-get安装apache
1.1 安装
在命令行终端中输入下面的命令:
ubuntu $ sudo apt-get install apache2
安装完成后,重启apache服务,在命令行终端中输入下面的命令:
ubuntu $ sudo /etc/init.d/apache2 restart
1.1.1 可能会出现的问题1
出现上述问题的原因:定义了多个NameVirtualHost,故将/etc/apache2/ports.conf中的NameVirtualHost *:80注释掉即可。
1.1.2可能会出现的问题2
原因:根据提示,无法可靠的确定服务器的有效域名,使用127.0.1.1作为服务器域名。应此,在下面的测试中,应该使用127.0.1.1,而不是127.0.0.1!
解决:打开以下文件(ubuntu14.04中安装的Apache默认不存在这个文件)
ubuntu $ vim /etc/apache2/httpd.conf
在文件中添加:
ServerName localhost:80
再次重启apache2,就可以使用127.0.0.1来访问web服务器啦!
需要说明的是,上面的问题是在使用物理机+ubuntu12.04环境中出现的,使用Vmware+ubuntu14.04时只出现问题2,但是并不影响使用127.0.0.1去访问web服务器!
1.3 测试
1.3.1 本机测试
在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了It works!,那就说明Apache就成功的安装了,Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了,所有要能过浏览器访问的Web文件都要放到这个目录里。
1.3.2 测试过程中可能遇到问题
原因:apache2使用的服务器地址不是127.0.0.1,根据在前面的分析,可能的ip为127.0.1.1,访问http://127.0.1.1即可。
说明:这个问题是使用物理机+ubuntu12.04时出现的,使用Wmware+ubuntu14.04时并没出现这个问题。
1.3.3 跨机测试
在VMware上安装ubuntu,网络设置为桥接模式。在ubuntu中启动Apache后,在Windows中使用浏览器打开ubuntu的IP(不是上面的127.0.0.1了!),即可显示与1.3.1相同的内容。也可以使用其它电脑对这个IP进行访问。
1.3.4 添加html文件
在/var/www/html目录中添加一个test.html文件(使用360浏览器保存一个网页,将其命名为test.html即可)。然后可以在浏览器中通过下面的格式访问这个test.html文件:
1.4 配置CGI
根据参考资料[13]的提示,进入进入/etc/apache2目录,然后创建mods-available/cgi.load的软链接到mods-enabled目录:
ubuntu $ cd /etc/apache2 ubuntu $ ln -s /etc/apache2/mods-available/cgi.load mods-enabled/cgi.load
提示:第1个目录必须指定全路径,否则链接不成功。
说明:mods-available目录中的文件表示当前Apache可用的模块,但是还没有正式生效。如果希望生效,必须创建软链接到mods-enabled目录中。
重启Apache即可使用CGI模块。参考资料[13]说明的配置方法比较复杂一些,我这里使用的是ubuntu14.04,配置相对了来说比较简单,只需要配置上面一个就可以正常使用CGI模块了。
1.5 测试CGI
1.5.1 perl语言
根据参考资料[14]的提示,写一个perl程序如下,并且命名为first.pl:
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.\n";
将first.pl复制到/usr/lib/cgi-bin目录中,然后在浏览器中输入以下地址,即可以看到first.pl的输出:Hello World.
提示:上面的IP地址要根据实际IP进行修改。
1.5.2 shell脚本
除了使用perl语言外,还可以使用shell脚本:
#!/bin/bash echo Content-type: text/html # 这是必须的格式 echo # 这是必须的格式 echo # 这是必须的格式 echo message form shell script.
将上述脚本内容保存为first.sh,并且开启可执行位:
ubuntu $ chmod +x first.sh
放在/usr/lib/cgi-bin目录下即可到达和1.5.1相同的效果。
1.5.3 C语言
这里再提供一个C语言版本的CGI程序:
#include <stdio.h> int main(void) { printf("Content-Type: text/html\n\n"); printf("message from hello.c\n"); return 0; }
编译上述程序,将可执行文件重名为hello,然后将其复制到/usr/lib/cgi-bin目录中,就可以通过网页访问。效果同1.5.1。
关于C语言版的CGI脚本的编写,详见参考资料[15]。
2 卸载
如果觉得不再需要apache了,可以将它卸载:
2.1 删除apache
在命令行中输入:
ubuntu $ sudo apt-get --purge remove apache-common ubuntu $ sudo apt-get --purge remove apache
2.2 找到没有删除掉的配置文件,一并删除
代码:
ubuntu $ sudo find /etc -name "*apache*" |xargs rm -rf ubuntu $ sudo rm -rf /var/www ubuntu $ sudo rm -rf /etc/libapache2-mod-jk
2.3 删除关联,这样就可以再次用apt-get install apache2 重装了
ubuntu $ dpkg -l |grep apache2|awk '{print $2}'|xargs dpkg -P
3 源码安装Apache
3.1 下载源码
在此http://httpd.apache.org/download.cgi下载最新版的apcache,然后将其复制到目录/usr/src中,对其进行解压:
ubuntu $ tar xvf httpd-2_X_XX.tar
3.2 配置和构建apache
至少要指定选项--enable-so,告诉apache启动加载共享模块的功能。
ubuntu $cd httpd-2_X_XX ubuntu $./configure --enable-so [other options]
可能遇到的问题:configure: error: APR not found. Please read the documentation.
原因:缺少apr包,安装一个就好!
ubuntu $wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz ubuntu $tar -zxf apr-1.4.5.tar.gz ubuntu $cd apr-1.4.5 ubuntu $./configure --prefix=/usr/local/apr ubuntu $make && make install
新问题:configure: error: APR-util not found. Please read the documentation.
原因:缺少apr-util包,安装一个就好!
ubuntu $wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz ubuntu $tar -zxf apr-util-1.3.12.tar.gz ubuntu $cd apr-util-1.3.12 ubuntu $./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config ubuntu $make && make install
Apache时加上:
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/
问题解决,继续下一步!
ubuntu $ make
3.3 安装apache
ubuntu $make install
安装成功,重启apache
ubuntu $/usr/local/apache2/bin/apachectl restart
可能出现的问题:(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
原因:80端口被占用了,把占用80端口的进程杀死行了!
ubuntu $ps -e
将会列出所有的apache2进程,用下面的命令逐个将他们杀死:
ubuntu $kill -9 xxx
还有资料说,使用netstat -lnp|grep 80找出占用80端口的进程,然后将其杀死。经测试,发现这样找到的进程不齐全!
3.4 测试
同方法1的测试
4 区别
方法1安装的apache,默认的文档目录是/var/www,而方法2安装的apache,默认的文档目录是[apache安装目录]/htdocs,可以通过修改httpd.conf中的DocumentRoot来改变。
参考资料
[1]ubuntu下安装Apache+PHP+Mysql
[2]apache2 [warn] NameVirtualHost *:80 has no VirtualHosts的解决方法
[3]Ubuntu 完全卸载apache2
[4]Ubuntu下彻底卸载apache2
[5]解决apache启动错误"httpd:Could not reliably determine..."
[6]安装Apache提示APR not found的解决办法
[7]解决编译Apache出现的问题:configure: error: APR not found . Please read the documentation
[8]apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
[9]配置Apache对CGI的支持
[10]Apache指南:CGI动态页面
[11] CGI & APACHE
[12]linux Apache CGI 安装配置
[13]Ubuntu Apache配置以及cgi配置
[14]CGI动态页面
[15]Getting Started with CGI Programming in C