今天我们来说一下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)、请求报文语法
<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)、响应报文语法
<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 (一个请求用一个进程响应,启动多个进程)
<IfModule prefork.c> StartServers 8 # 服务启动时所启动的httpd进程个数 MinSpareServers 5 # 服务运行过程当中最小保持的空闲进程数 MaxSpareServers 20 # 服务运行过程当中最大保持的空闲进程数 ServerLimit 256 # 指定MaxClients上限 MaxClients 256 # 服务运行过程中最多允许的用户同时请求连接数 MaxRequestsPerChild 4000 # 服务运行过程中每个进程最多允许处理的用户请求数 </IfModule>
③worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))
<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)、允许用户访问
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)、允许用户组访问
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的访问控制
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、用户个人家目录站点
注释 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、路径别名
Alias /URL "local_path" 例如:Alias /images/ "/tmp/test" http://172.16.1.102/images/ 就等于是访问tmp/test目录下的文档
17、虚拟主机配置
(1)、基于IP的虚拟主机配置
<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)、基于端口的虚拟主机配置
<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)、基于主机名的虚拟主机配置
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、默认虚拟主机配置
<VirtualHost _default_:80> DocumentRoot /www/default80 # ... </VirtualHost> <VirtualHost _default_:*> DocumentRoot /www/default # ... </VirtualHost>
19、server-status配置
<Loacation /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 172.16.1.102 </Location> <Location> 指令用于定义url <Directory> 指令用于本地文件系统路径
20、CGI脚本
修改主配置文件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