您的位置:首页 > 理论基础 > 计算机网络

Apache Http Server学习笔记

2014-05-02 15:02 337 查看
第一次接触Apache是数年前了,现在可能会转向Php开发,所以抽时间又一次学习了Apache服务器的使用,不善于总结和做笔记的我总是与残酷的时间抗衡着,时间久了,我无力反抗,那些学过的东西早已被抛到九霄云外了,我有点痛恨自己当初为什么没有能把所有学习的知识总结下来呢?这一次我必须要总结下昨天对Apache的学习。这里很多东西我都参考了《细说php》




Apache介绍


Apache是世界上排名第一的开源的Web服务器软件,同类型的有Nginx反向代理服务器,不过Apache以最具稳定性得到了广大开发者的认可,不过在性能上Nginx会略胜一筹。Apache通过外置模块可以发布CGI,PHP等网站应用。具体的可以参考官网 http://httpd.apache.org/


Apache源代码安装


下载Apache源代码包

1
cd
/home/app/
2
wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.25.[/code]
tar
.gz


解压源码包并安装

1
tar
xzvf
httpd-2.2.45.
tar
.gz
2
cd
httpd-2.2.25
3
./configure
prefix=/usr/
local
/apache2
4
make
5
make
install



Apache目录结构


bin目录

存放apache一些可执行文件,包含 ab(用于压力测试) , apachectl(用于操作apache服务) , htpasswd(apache的权限设置)等等。


cgi-bin目录

这里一般存放cgi脚本,如通过perl,c等编写cgi来发布web。


error目录

访问apache发布的网站通常会出现一些错误页面,所有的错误页面在这里定义。


htdocs目录

该目录非常关键,它是默认apache的根目录,安装完apache并启动之后,通过 http://ip:8080/index.html 便可以找到 htdocs 下的index.html,将文件内容发送给客户端浏览器,浏览器解析并显示。不过apache的根目录可以通过配置文件自定义,后面会讲到。


icons目录

网站中所有的默认的小图标都存放在这里,如 默认的favicon.ico小图标等。


logs目录

该目录存放日志信息,也非常重要,用于日常的分析。一般下面会至少有这两个文件 access_log(正常访问的日志) error_log(访问错误的日志)。

1
tail
-20f
/usr/
local
/apache2/logs/access_log
//动态查看正常访问日志的后20行


man目录

该目录存放一些man的帮助文档,不太重要,可以忽略。


conf目录

该目录存放apache的配置文件,同样也很重要,其中 httpd.conf 为主配置文件,大家应该注意到了该目录下面的 extra/目录,extra/目录下面有很多以功能拆分好了的 *.conf 配置,这是附加配置文件,在httpd.conf 中通过 Include extra/httpd-default.conf 来载入附加配置文件,可以将一些配置信息写入附加配置文件并在主配置文件中引入就Ok了。

附加配置文件默认没有开启,需要修改 httpd.conf 配置文件来开启。

01
cd
/usr/
local
/apache2/
02
conf/httpd.conf
//主配置文件
03
conf/extra/
//所有附加配置文件
04
httpd-autoindex.conf
//配置目录列表
05
httpd-dav.conf
//配置dav协议
06
httpd-default.conf
//配置apache服务相关的全局参数
07
httpd-info.conf
//配置服务器信息与状态显示
08
httpd-languages.conf
//配置语言支持
09
httpd-manual.conf
//提供apache文档访问
10
httpd-mpm.conf
//多路处理模块(mpm)配置
11
httpd-multilang-errordoc.conf
//多语言错误应答配置
12
httpd-ssl.conf
//https的ssl模块配置
13
httpd-userdir.conf
//用户主目录配置
14
httpd-vhosts.conf
//虚拟主机的配置


Apache常用操作

1
cd
/usr/
local
/apache2/bin/
2
apachectl
-l  列出apache的信息,模块之类的
3
apachectl
-t  检查配置文件
4
apachectl
start  启动apache
5
apachectl
restart 重启apache
6
apachectl
stop   关闭apache
在启动apache之前要学习apache配置的配置与其虚拟主机的设置。

在linux平台下,apache默认会启动一个主进程,主进程会打开5个子进程,客户端连接会与某个子进程通信,各个子进程由主进程管理并共享主进程。(apache会保证至少有5个空闲子进程)

1
root@debian:/home/app/httpd/bin
#
ps aux | grep httpd
2
root
2979  0.0  0.1  48972  2668 ?  Ss   08:53   0:00 /home/app/httpd/bin/httpd -k start
3
daemon
2980  0.1  0.3  52300  4856 ?  S08:53   0:00 /home/app/httpd/bin/httpd -k start
4
daemon
2981  0.1  0.3  52300  4856 ?  S08:53   0:00 /home/app/httpd/bin/httpd -k start
5
daemon
2982  0.2  0.3  52300  4856 ?  S08:53   0:00 /home/app/httpd/bin/httpd -k start
6
daemon
2983  0.2  0.3  52300  4856 ?  S08:53   0:00 /home/app/httpd/bin/httpd -k start
7
daemon
2984  0.1  0.3  52300  4856 ?  S08:53   0:00 /home/app/httpd/bin/httpd -k start
daemon用户开启的进程全部为对应root进程的子进程,具体的可以自己深入研究。

注意:启动apache可能报如下错误

1
httpd:
Syntax error on line 502 of /usr/
local
/apache2/conf/httpd.conf:
Cannot load /usr/
local
/apache2/modules/libphp5.so
into server: /usr/
local
/apache2/modules/libphp5.so:
cannot restore segment prot after reloc: Permission denied
解决办法: 关闭selinux即可。

1
setenforce
0
具体原因可以参考:http://soft.chinabyte.com/os/104/12170104.shtml


Apache配置文件

apache的主配置文件中各个关键词的作用:

其中配置文件的语法是 指令 + 值 (多个值用空格分开);# 为注释(#前不能有字符);指令太长可以用 "\" 续行;建议指令首字母大写,使用驼峰法,参数值区分大小写;

01
ServerRoot
"/usr/local/apache2"
//
apache安装的路径
02
03
Listen
80  //监听本机80端口(多网卡下,多个ip都可以访问)
04
Listen
192.168.1.200:80   //服务器多网卡情况,监听某个网卡ip的的80端口
05
Listen
192.168.1.200:443 https  //非http协议的情况
06
 
07
//
IfModule对静态模块的判断,静态模块是编译apache时引入的,动态模块(*.so 如:libphp5.so)是安装完成之后手动外挂上去的,IfModule 可以嵌套,具体这里不再详细列举。
08
<IfModule
!mpm_netware_module>
09
<IfModule
!mpm_winnt_module> //非windows平台
10
User
daemon//启动apache的用户与组
11
Group
daemon
12
</IfModule>
13
</IfModule>
14
15
ServerAdmin
ahern88@163.com//使用管理员邮箱即可
16
17
ServerName
                        //服务器名,若有host写入host名,无host写本机ip即可
18
19
DocumentRoot
"/usr/local/apache/htdocs"
//
apache根目录
20
21
-----其他配置段在下节介绍-----
22
23
ErrorLog
"logs/error_log"
//
定义错误日志
24
25
LogLevel
warn //定义错误日志级别
26
27
DefaultType
text/plain //定义默认http响应文件类型
28
29
Include
extra/httpd-vhosts.conf//引入附加配置文件
30
31
LoadModule
wsgi_module  modules/mod_wsgi.so   //载入动态模块,语法 : LoadModule module名 module路径


Apache配置段

01
<IfDefine
ClosedForNow>
02
</Ifdefine>
03
04
<IfModule
!mod_mime_magic.c>
05
<IfModule
!bbb>     //配置段允许嵌套
06
</ifModule>
07
</IfModule>
08
09
<IfVersion
>=2.1>//Apache版本信息
10
</IfVersion>
11
12
<Directory
/
dir
/>
13
AllowOverride
None //允许.htaccess 覆盖此配置
14
Options
None         //不允许列出文件列表,开启使用 Options Indexes
15
Order
allow,deny//先允许再拒绝
16
Allow
from all        //允许所有请求
17
Deny
from 192.168.1.200  //拒绝ip访问
18
</Directory>
19
20
<DirectoryMatch
'regx'
>
21
</DirectoryMatch>
22
23
<Files
demo.html>
24
</Files>
25
26
<FilesMatch
"^\.ht"
>
//禁止直接访问 .htaccess文件等
27
Order
allow,deny
28
Deny
from all
29
Satisfy
All
30
</FilesMatch>
31
32
<Location
'/pic'
>
//Location通过配置  rewriter.so 模块重写url地址
33
</Location>
34
35
<LocationMatch
'regx'
>
36
</LocationMatcn>
37
38
39
//
做几个例子
40
1.载入php模块
41
LoadModule
php5_module modules/libphp5.so
42
<IfModule
dir_module>
43
DirectoryIndex
index.php index.html //这里可以在给一个通用错误页面屏蔽,目录访问 commons/error.html
44
AddType
application/x-httpd-php .php
45
</IfModule>
46
47
2.
发布一个目录  /var/www/html/(注意该目录必须是拥有 daemon 用户和组的权限) ,通过 http://ip:8080/[/code]
dir
/
48
/var/www/html/下有abc.html
bbb.html
49
50
Alias
/
dir
/
"/var/www/html/"
//
注意,这里一定不要写成 /var/www/html ,最后的 /必须加上
51
<Directory
"/var/www/html"
>
<span></span> AllowOverride None  (All) 不允许被覆盖 .htaccess文件
52
Options
Indexes FolowSymLinks   允许索引,允许符号链接
53
Order
Allow,Deny
54
Allow
from all
55
Deny
from 192.168.1.101
56
57
<Files
"bbb.html"
>
//这里设置了之后无法访问 bbb.html
58
Order
Allow,Deny
59
Deny
from all
60
</Files>
61
</Directory>
62
63
同样也可以通过
<Location> 限制URI地址


Apache虚拟主机配置

如果想在一台电脑上发布多个web应用,那么就必须要学会虚拟主机的配置,虚拟主机的配置可以分为两种:

1. 基于IP地址

这种很少用,因为IP地址缺乏,这样做很浪费IP资源。

2. 基于域名

通过dns解析,将多个域名指向同一个ip地址。比如 (www.a.com www.b.com www.c.com)

01
//
这里我们可以修改 httpd.conf 同样也可以修改 extra/httpd-vhosts.conf 然后将httpd.conf 中的Include打开
02
03
NameVirtualHost
*:80 <span></span> <VirtualHost *:80> //允许通过ip访问本机
04
ServerName
192.168.1.200
05
DocumentRoot
/var/www/html
06
ErrorLog
/usr/
local
/apache2/logs/error_log
07
CustomLog
/user/
local
/apache2/logs/access_log
combined
08
</VirtualHost>
09
10
<VirtualHost
*:80>
11
ServerName
www.a.com
12
DocumentRoot
/var/www/a/
13
ErrorLog
/var/www/a/logs/error_log
14
CustomLog
/var/www/a/logs/access_log combined
15
</VirtualHost>
16
17
<VirtualHost
*:80>
18
ServerName
www.b.com
19
DocumentRoot
/var/www/b/
20
ErrorLog
/var/www/b/logs/error_log
21
CustomLog
/var/www/b/logs/access_log combined
22
</VirtualHost>
23
24
<VirtualHost
*:80>
25
ServerName
www.c.com
26
DocumentRoot
/var/www/c/
27
ErrorLog
/var/www/c/logs/error_log
28
CustomLog
/var/www/c/logs/access_log combined
29
</VirtualHost>
1
有时候我们希望主机的配置有应用发布者自己控制,而不希望他拥有修改apache配置的权力,那么我们可以通过
.htaccess 文件控制。
2
前提需要开启
AccessFileName .htaccess ,这个默认是开启的;还有  AllowOverride  All 必须开启。
view
source

print?

01
.htaccess
文件内容如下
02
Options
+Includes
03
AddType
text/html shtml
04
AddHandler
server-parsed shtml
05
AuthName
"Password
Required"
06
AuthUserFile
/www/passwords/password.
file
07
AuthGroupFile
/www/passwords/group.
file
08
Require
Group admins
09
10
这样该应用会覆盖apache中的配置文件,完成应用自己控制访问设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: