今天我们来说一下Web服务器当中的apache,在早些时候基本算是Web服务器市场占有率最高的一款开源Web服务器产品,其功能众多、稳定且开源,使得apache非常流行。下面我们来讲一下Web相关的知识及httpd的部分应用
一、Web相关知识
1、URI与URL
URI: Uniform Resource Indentifier,统一资源标示符。全局范围内,可以唯一引用某一个独立资源的命名方式被称为统一资源标示符;统一是指路径格式上的统一。
URL:Uniform Resource Locator,统一资源定位符,用于描述在互联网上,互联网资源的统一表示格式,是URI的子集。表示格式为protocol://HOST:port/path/to/file
2、Web资源(对象)
能通过URL唯一标记,并且能被客户端访问的资源被称为Web资源,也可称为Web对象,如http://www.baidu.com/logo.gif;多个资源很可能被整合为一个html文档
3、HTTP Method
- HEAD
- GET
- PUT
- POST
- DELETE
- TRACE
- OPTIONS
- CONNECTION
4、MIME
Multipurpose Internet Mail Extension, 多用途互联网邮件扩展,即将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
5、MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
6、请求报文与相应报文
(1)、请求报文语法
1
2
3
4
5
6
7
8
9
10
11
12
| <method> <request-URL> <version>
<headers>
<entity-body>
例如:
GET / HTTP/1.1
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Host:httpd.apache.org
|
(2)、响应报文语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <version> <status> <reason-phrase>
<headers>
<entity-body>
例如:
HTTP/1.1 200 OK
Accept-Ranges:bytes
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1106
Content-Type:text/css
Date:Wed, 16 Dec 2015 11:11:13 GMT
ETag:"e20-4d6aa6c1982c8-gzip"
Keep-Alive:timeout=30, max=96
Last-Modified:Wed, 27 Feb 2013 01:09:13 GMT
Server:Apache/2.4.7 (Ubuntu)
Vary:Accept-Encoding
上面两个报文的第一行通常称作报文“起始行(start line)”;
后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。
另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。
|
7、HTTP状态码
①1xx: 纯信息类
②2xx: “成功”类的信息 (200, 201, 202)
③3xx:重定向类的信息 (301, 302, 304)
④4xx: 客户端错误类的信息 (404)
⑤5xx:服务器端错误类的信息
8、Web服务器的主要操作
①建立连接——接受或拒绝客户端连接请求
②接收请求——通过网络读取HTTP请求报文
③处理请求——解析请求报文并做出相应的动作
④访问资源——访问请求报文中相关的资源
⑤构建响应——使用正确的首部生成HTTP响应报文
⑥发送响应——向客户端发送生成的响应报文
⑦记录日志——当已经完成的HTTP事务记录进日志文件
9、http/1.1
增强了缓存的功能
长连接:keep-alive
10、MPM:Multi-Processing Modules
①mpm_winnt:windowsNT专用
②prefork (一个请求用一个进程响应,启动多个进程)
1
2
3
4
5
6
7
8
| <IfModule prefork.c>
StartServers 8 # 服务启动时所启动的httpd进程个数
MinSpareServers 5 # 服务运行过程当中最小保持的空闲进程数
MaxSpareServers 20 # 服务运行过程当中最大保持的空闲进程数
ServerLimit 256 # 指定MaxClients上限
MaxClients 256 # 服务运行过程中最多允许的用户同时请求连接数
MaxRequestsPerChild 4000 # 服务运行过程中每个进程最多允许处理的用户请求数
</IfModule>
|
③worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))
1
2
3
4
5
6
7
8
| <IfModule worker.c>
StartServers 4 # 服务启动时所启动的httpd进程个数
MaxClients 300 # 服务运行过程中最多允许的用户同时请求连接数
MinSpareThreads 25 # 服务运行过程中最小保持的空闲线程数
MaxSpareThreads 75 # 服务运行过程中最大保持的空闲线程数
ThreadsPerChild 25 # 每个进程生成的线程个数
MaxRequestsPerChild 0 # 每个进程最多允许处理的用户请求数(为0,因为是线程处理用户请求,并不是进程)
</IfModule>
|
④event (一个进程处理多个请求)
11、httpd
-V:查看httpd服务版本以及编译的参数
-l:显示编译进httpd的模块列表,但是不会显示使用LoadModules加载的动态模块
-M:显示加载的静态和动态模块
-t:检查配置文件是否有语法错误
12、基于用户或组访问控制
(1)、允许用户访问
1
2
3
4
5
6
7
8
9
10
| AllowOverride AuthConfig
AuthType Basic
AuthName "Personal area..."
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require valid-user
touch /etc/httpd/conf/.htpasswd
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
htpasswd -m /etc/httpd/conf/.htpasswd hadoop
|
(2)、允许用户组访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| AllowOverride AuthConfig
AuthType Basic
AuthName "Personal area..."
AuthUserFile "/etc/httpd/conf/.htpasswd"
AuthGroupFile "/etc/httpd/conf/.htgroup"
Require group groupname
touch /etc/httpd/conf/.htpasswd
touch /etc/httpd/conf/.htgroup
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
htpasswd -m /etc/httpd/conf/.htpasswd hadoop
/etc/httpd/conf/.htgroup格式:groupname:user1 user2 ...
|
13、基于ip的访问控制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| AllowOverride none
Order Deny,Allow
Deny from 172.16.1.100
地址表示方法
IP:172.16.1.110
network/netmask:172.16.1.110/16
Host:www.soysauce.com
domain name:soysauce.com
Partial IP:172.16(172.16.0.0/16)
|
14、用户个人家目录站点
1
2
3
4
5
6
7
8
9
10
11
| 注释 UserDir disabled
启用 UserDir public_html
useradd hadoop
su - hadoop
mkdir public_html
echo "hadoop's personal site" >> public_html/index.html
chmod o+x /home/hadoop
exit
service httpd restart
|
15、PV与UV
PV(Page View):每天的页面访问量
UV(User View):每天的独立IP访问量
16、路径别名
17、虚拟主机配置
(1)、基于IP的虚拟主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <VirtualHost 172.16.1.110:80>
ServerName www.a.com
DocumentRoot "/data/www/a.com"
CustomLog "/var/log/httpd/a.com/access_log"
ErrorLog "/var/log/httpd/a.com/error_log"
<Directory "/data/www/a.com">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
<VirtualHost 172.16.1.111:80>
ServerName www.b.net
DocumentRoot "/data/www/b.net"
CustomLog "/var/log/httpd/b.net/access_log"
ErrorLog "/var/log/httpd/b.net/error_log"
<Directory "/data/www/b.net">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
|
(2)、基于端口的虚拟主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <VirtualHost 172.16.1.110:80>
ServerName www.a.com
DocumentRoot "/data/www/a.com"
CustomLog "/var/log/httpd/a.com/access_log"
ErrorLog "/var/log/httpd/a.com/error_log"
<Directory "/data/www/a.com">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
<VirtualHost 172.16.1.110:8080>
ServerName www.c.edu
DocumentRoot "/data/www/c.edu"
CustomLog "/var/log/httpd/c.edu/access_log"
ErrorLog "/var/log/httpd/c.edu/error_log"
<Directory "/data/www/c.edu">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
|
(3)、基于主机名的虚拟主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| DNS解析能正确的解析两个主机名到自己的IP地址上
/etc/hosts
172.16.1.103 www.b.net
172.16.1.103 www.d.org
NameVirtualHost 172.16.1.111:80
<VirtualHost 172.16.1.111:80>
ServerName www.b.net
DocumentRoot "/data/www/b.net"
CustomLog "/var/log/httpd/b.net/access_log"
ErrorLog "/var/log/httpd/b.net/error_log"
<Directory "/data/www/b.net">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
<VirtualHost 172.16.1.111:80>
ServerName www.d.org
DocumentRoot "/data/www/d.org"
CustomLog "/var/log/httpd/d.org/access_log"
ErrorLog "/var/log/httpd/d.org/error_log"
<Directory "/data/www/d.org">
Options none
AllowOverride none
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost>
|
18、默认虚拟主机配置
1
2
3
4
5
6
7
8
9
| <VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>
<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>
|
19、server-status配置
1
2
3
4
5
6
7
8
9
10
| <Loacation /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16.1.102
</Location>
<Location> 指令用于定义url
<Directory> 指令用于本地文件系统路径
|
20、CGI脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 修改主配置文件httpd.conf
启用 LoadModule cgi_module modules/mod_cgi.so
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
在/var/www/cgi-bin目录下创建一个脚本test
#!/bin/bash
cat << EOF
Content-Type:text/html
<pre>
<h1>$(/bin/date)</h1>
</pre>
EOF
然后增加执行权限 chmod +x test
|
21、apache与php结合的方式
①CGI
②Module
③FastCGI
|