今天本来是想试一下GREENPLUM可写外部表的,结果发现服务器上没有APACHE服务,所以就变成了学习APACHE的过程了。
首先要下载一个APACHE,我是从下面的网址下载的,用的2.0.64版本
http://httpd.apache.org/download.cgi#apache20
然后就是常规步骤了
解压 gzip
解包 tar xvf
编译 configure --prefix=...
安装 make && make install
然后进入到在configure时指定的--prefix目录中,编辑conf目录下的httpd.conf配置文件
关于配置文件httpd.conf的详细说明可以参考下面的官方文档 ,我这里只简单列出几个
http://httpd.apache.org/docs/2.0/
#用户名和用户组
User gpadmin1
Group gpadmin1
#服务器名称以及监听的端口号
ServerName 10.20.151.9:80
Listen 80
#访问时的根路径
DocumentRoot
"/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs"
然后就可以启动了
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs]
#/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs]
#ps -ef |grep httpd
root 6561
1 0 17:25 ?
00:00:00 /home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
gpadmin1 6563 6561 0 17:25
? 00:00:00
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
gpadmin1 6564 6561 0 17:25
? 00:00:00
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
gpadmin1 6565 6561 0 17:25
? 00:00:00
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
gpadmin1 6566 6561 0 17:25
? 00:00:00
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
gpadmin1 6567 6561 0 17:25
? 00:00:00
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
root 6569 3736 0 17:25
pts/5 00:00:00 grep httpd
这里我们看到多个HTTPD进程,其实是一个父进程多个子进程,关于这个子进程的数量可以使用下面几个参数来控制
###########################
MinSpareServers 5
MaxSpareServers 20
在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,使得既能及时回应客户请求,又能减少不必要的进程数量。
因此就可以使用参数MinSpareServers来设置最少的空余子进程数量, 以及使用参数MaxSpareServers
来限制最多的空闲子进程数量,多余的服务器进程副本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少不必要的副本退出。
StartServers 8
StartServers参数就是用来设置httpd启动时启动的子进程副本数量,这个参数与上面定义的MinSpareServers和MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于MinSpareServers和大于MaxS
pareServers都没有意义。
###########################
打开浏览器,输入如下地址就可以访问/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs/index.html了
http://10.20.151.9/
同时,也可以使用wget命令从该服务器上下载文件
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install]
#wget http://10.20.151.9/index.html
--16:45:47-- http://10.20.151.9/index.html
Connecting to 10.20.151.9:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6738 (6.6K) [text/html]
Saving to: `index.html'
100%[===========================================================================================>] 6,738 --.-K/s in 0s
16:45:47 (584 MB/s) - `index.html' saved [6738/6738]
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install]
#ll index.html
-rw-r--r-- 1 root root 6738 Jun 13 16:30 index.html
前面我们指定了参数DocumentRoot
"/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs",因此在后面的访问中都是把这个目录当作“根目录”,然后再访问其下层的目录内容,但有时我们可能需要把部分文件放置到不同的地方去,这可以通过使用软连接来实现。
下面我们举个简单的例子,在根目录下创建文件haha.txt,然后在参数DocumentRoot指定目录下创建一个软链接root到根目录,之后在wget命令中通过这个软链接来访问实际的根目录下文件
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs]
#cat /haha.txt
haha
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs]
#wget http://10.20.151.9/root/haha.txt
--19:10:18-- http://10.20.151.9/root/haha.txt
Connecting to 10.20.151.9:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5 [text/plain]
Saving to: `haha.txt'
100%[===========================================================================================>] 5 --.-K/s in 0s
19:10:18 (1.19 MB/s) - `haha.txt' saved [5/5]
这里已经成功的把根目录下的文件haha.txt拉到当前目录下了
[Intranet root@hadoop5
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs]
#cat haha.txt
haha
有时在生产环境上不可能开放所有端口对外提供访问,比如只开放80端口对外提供访问,可是你有其他的程序想要通过WEB界面来进行一些监控,比如HADOOP的NAMENODE和JOBTRACKER的监控页面,这些程序使用80外的其他端口,这时如果仍要在WEB界面进行访问,就需要在APACHE的配置文件里做一些端口映射转换了。
在/home/gpadmin1/joe.wangh/apache/httpd_install/conf目录下的httpd.conf配置文件中增加如下几行
RewriteEngine on
RewriteLog logs/rewrite.log
RewriteRule
^/job/(.*)
http://10.20.151.9:50030/$1?%{query_string} [L,P]
RewriteRule
^/dfs/(.*)
http://10.20.151.9:50070/$1?%{query_string} [L,P]
重启APACHE服务使新的配置生效
[Intranet root@hadoop5 /root]
#/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
restart
[Intranet root@hadoop5 /root]
#
这时通过浏览器访问如下链接
http://10.20.151.9/dfs/dfshealth.jsp
就相当于访问
http://10.20.151.9:50070/dfshealth.jsp
另外,有的朋友可能在使用非root账户启动APACHE时会报错
[gpadmin1@hadoop5 htdocs]$
/home/gpadmin1/joe.wangh/apache/httpd_install/bin/httpd -f
/home/gpadmin1/joe.wangh/apache/httpd_install/conf/httpd.conf -k
start
(13)Permission denied: make_sock: could not bind to address
[::]:80
no listening sockets available, shutting down
Unable to open logs
使用如下语句解决即可
chmod u+s httpd
chown root:root httpd
最后一点需要说明的是,有时候我们可能需要对访问一些目录权限进行控制。下面我举一个简单的例子,假设我们对在WEB中浏览/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs/autest/目录时进行权限控制,需要输入用户名和密码
1、要生成一个密码文件
[gpadmin1@hadoop5 bin]$ ./htpasswd -bc .htpasswdtest joe joe
Adding password for user joe
2、把生成的密码文件./htpasswd拷贝到目录/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs/autest/下
3、在/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs/autest/下创建.htaccess文件,内容如下
AuthName "RTDC"
AuthType Basic
AuthUserFile
/home/gpadmin1/joe.wangh/apache/httpd_install/htdocs/autest/.htpasswdtest
require valid-user
OK了,这时我们在WEB中输入如下地址访问,就会提示我们输入密码了
http://10.20.151.9/autest/