码迷,mamicode.com
首页 > Web开发 > 详细

apache的学习笔记

时间:2018-03-16 10:30:37      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:apache的学习

web service:
传输层:提供进程地址.
Port Number:
tcp:传输控制协议,面向连接的协议,通信是建立虚拟链路,结束后拆除链路.
0-65535
udp:user datagram protocol,无连接的协议.
0-65535
IANA:
0-1023:永久分配给固定的应用使用.
1024-41951:亦为注册端口,但要求不是太严格,分配给程序注册为某应用程序使用.
41952+:客户端随机使用的端口.(动态端口或私有端口)
其范围定义:/proc/sys/net/ipv4/ip_local_port_range
在客户端和服务器端通信是使用的是一对socket.

套接字(socket):
IPC的一种实现,允许位于不同主机(甚至同一主机)上的不同进程之间进行通信,数据交换;socket API,出现于1983年左右,最早在4.2的BSD系统上实现.
类型:
SOCK_SIREAM:tcp socket
SOCK_DGRAM:udp socket
SOCK_RAM:裸socket
ipv4地址私有地址:
10.0.0.0/8
172.16.0.0/16-172.31.0.0/16
192.168.0.0/24-192.168.255.0/24

 通信过程中两方主机内核中都会有发送缓冲和接收缓冲,客户端的接收缓冲对应服务器端的发送缓冲.

tcp协议的特性:
请求连接,三次握手
将数据打包成段,校验和(CRC-32)
确认,重传以及超时
排序,逻辑序号
流量控制:滑动窗口算法
拥塞控制:慢启动和拥塞避免算法

Socket Domain(根据使用的地址不同)
AF_INET:address family:ipv4.
AF_INET6:ipv6.
AF_UNIX:同一主机上不同进程进行通信时使用.
每类套接字都至少提供了两种socket:流.数据报.
流:可靠的传递,面向连接,无边界.
数据报:不可靠地传递,有边界.

套接字相关的系统调用:
socket():创建一个套接字.
bind():绑定.
listen():监听.
accept():接收请求.
connect():请求连接建立.
write():发送数据.
read():接收数据.
send(),recv(),sendto(),recvfrom().

http:超文本传输协议(hyper text transfer protocol).
html:编程语言,超文本标记语言.

MIME:multipurpose Internet mail extesion

工作机制:
http请求
http响应
http资源:web resource
静态文件:.jpg,.html,.gif,.txt,.js,.css,.avi
动态文件:.php,.jsp.

  媒体:
    媒体类型(MIME类型):major/minor
        text/html
        text/planin
        image/jpeg
        image/gif

URI:uniform resource identifier
URL(uniform resource locator):用于描述某服务器某特定资源的位置.
Scheme://Server:Port/Path/to/resource
URN(uniform resource naming)

http协议版本:
HTTP/0.9:原型版本,功能简陋.
HTTP/1.0:第一个广泛使用的版本,支持MIME.
HTTP/1.1:增强了缓存功能.
SPDY:谷歌开发的一种协议,通过压缩,多路复用和优先级来缩短加载时间.
HTTP/2.0:

一次完整的http请求过程:
(1) 建立或处理连接:接收请求或拒绝请求.
(2) 接收请求:
接收来自于网络的请求报文中对资源的一次请求的过程.
并发访问响应模型(web I/O):
单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求串行响应.
多进程I/O结构:启动多个线程,每一个进程响应一个请求.
复用I/O结构:一个进程响应n个请求.
多线程模型:一个进程生成n个线程.
事件驱动:event-driven
复用的多进程I/O结构:一共启动多个进程,每个进程响应n个请求.
(3) 处理请求:
对请求报文进行解析,并获取请求的资源及请求方法等相关信息.
元数据:请求报文首部
<method> <URL> <VERSION>
Host:www.baidu.com 请求的主机名称
Connection:指明这次连接的方式
(4) 访问或获取资源:
获取请求报文中请求的资源.
web服务器:即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后的生成的资源,这些资源放在本地文件系统某路径下,此路径通常称为DocRoot
(5) 构建响应报文.
(6) 发送响应报文.
(7) 记录日志.

http服务器程序:
httpd(apache)
nginx
lighttpd

  应用程序服务器:
    IIS
    tomcat,jetty,jboss,resin
    webshpere,weblogic,oc4j

httpd的安装配置和使用:
httpd:apache
a patchy server=apache
ASF:apache software foundation

httpd的特性:
高度模块化(DSO机制):core + modules
DSO:dynamic shared object
MPM:multi-processing modules(多路处理模块)
prefork:多进程模型,每个进程响应一个请求.
一个主进程负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个.
worker:多线程模型,多进程生成,一个进程生成多个线程,一个线程响应一个请求.
event:事件驱动模式,一个线程响应多个请求

安装apache:
安装方式:
rpm
编译
centos6:2.2
centos7:2.4
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
配置文件:
/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件目录:
/var/log/httpd
access.log:访问日志.
error.log:错误日志.
站点文件目录:
/var/www/html
模块文件路径;
/usr/lib64/

常用配置:
1.修改监听的ip和port.
Listen [ip:] port
省略ip表示监听本机所有ip;Listen可重复出现多次.
2.持久连接.
persistent connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成.
任何断开?
数量限制:默认100
时间超时:可配置
副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应.
折衷:使用较短的持久连接功能.
httpd-2.4支持毫秒级持久时间.
KeepAlive On|Off:是否允许长连接.
MaxKeepAliveRequests #:最大的持久连接数.
KeepAliveTimeout #:等待下一个连接的秒数.
默认为/usr/sbin/httpd.其使用prefork
查看模块列表:
查看静态编译的模块:
httpd -l:查看静态编译的模块
查看静态编译及动态装载的模块.
httpd -M

更换使用的httpd程序:
打开/etc/sysconfig/httpd中的关于worker的一行

关于mpm_Profork的选项:
<IfModule prefork.c>
StartServers 8 :开始启动时启动的进程数,即几个主进程的子进程.
MinSpareServers 5 :最少空闲进程数.
MaxSpareServers 20 :最大空闲进程数.
ServerLimit 256 :能够为MaxClients准备的服务器进程数量.
MaxClients 256 :允许同时连接的最大请求数量.
MaxRequestsPerChild 4000:一个服务器进程最大能够请求多少个请求,相当于生命周期一样.
</IfModule>
mpm_worker的选项:
<IfModule worker.c>
StartServers 4 :服务器启动时启动的进程.
MaxClients 300 :服务器端最大启动的线程数.
MinSpareThreads 25 :最少空闲线程数.
MaxSpareThreads 75 :最大空闲线程数.
ThreadsPerChild 25 :每个进程能启动的线程数.
MaxRequestsPerChild 0 :每个线程能接收的请求数.
</IfModule>

PV,UV
PV:Page View:页面访问量.
UV:User View:用户访问量.
独立ip量

DSO(动态共享对象)
配置指令实现模块加载
loadmodule <mod_name> <mod_path>

模块路径可使用相对地址
  相对于ServerRoot执行的路径而言的.

定义‘Main‘ server.
DocumentRoot
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置.
DocumentRoot "/var/www/html"
index.html -->http://HOST:PORT/index.html

站点访问控制
可基于两种类型的路径指向对那些资源进行访问控制
文件系统路径
<Direcotry ""></Direcotry>
<File ""></File>
<FileMatch ""></FileMatch>
URL路径
<Location ""></Location>

访问控制机制
   基于来源地址
   基于用户账号密码

7.Directory中基于来源地址实现访问控制
(1)options
所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
Indexes:索引
FollowSymLinks:允许跟踪符号链接文件
SymLinksifOwnerMatch:符号链接的文件和原文件属主是同一个是允许
ExecCGI:允许执行CGI脚本
MultiViews:执行隐含文件名匹配
(2)基于来源地址的访问控制
Order:检查次序
Order allow,deny
Order deny,allow
后面的是默认机制.
Order allow,deny
allow from
deny all
来源地址:
ip
netadd
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

8.定义默认主页面
DirectoryIndexes index.html index.html.var

9.日志设置
错误日志:
Errorlog logs/error_log
Errorlog warn
debug,info,notice,warn,erro,crit,alert,emerg

访问日志
CustomLog logs/access_log combined

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
      %h:客户端地址
      %l:remote logname (from identd,if supplied). -表示为空
      %u:remote user,登录的用户名
      %t:time the request was received ,服务器收到请求的时间
      %r:first line ofrequest,请求报文的首部的信息.
      %>s:响应状态码
      %b:响应报文的大小,单位是字节,不包括响应报文首部
      %{Referer}i:请求报文当中"referer"首部的值,当前资源的访问入口,即从哪个页面中的超链接跳转而来
      %{User-Agent}i:请求报文当中"User-Agent"首部的值,即发出请求的应用程序

路径别名
DocumentRoot "/var/www/html"
http://www.zeng.com/fang
-->/www/apache/fang
Alias /URL/ "/PATH/TO/SOMEDIR"

  Alias /bbs/  "/www/apache/fang"

设定默认编码格式
AddDefaultCharset UTF-8
GBK,GB2312,GB18030

基于用户的访问控制
认证质询
www-Authenicate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码.
认证:
Authorization:客户端邮件填入账号和密码后再次发送请求报文,认证通过,则服务器发送响应的资源
认证类型:
basic:明文
digest:消息摘要

  安全域:需要用户认证后才能访问的路径
      应该通过名称对其进行标识,并用于告知用户认证的原因
  用户的账号和密码存储于何处
     存储:
       文本文件
       SQL数据库
       ldap
       nis
    basic认证:
      (1)定义安全域
          <Directory "">
            Options None
            AllowOverride None
            AuthType Basic
            AuthName "STRING"
            AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
            Require user username1 username2 ...
            AuthGroupFile "/PATH/TO/HTTPD_GROUP_PASSWD_FILE"
          <Directory>
             允许账号文件中的所有用户登录访问
                Require valid-user
              使用组登录时需要定义用户文件和组文件.
                 组文件:每行定义一个组
                   GROUP_NAME:user1 user2 user3
      (2)提供账号和密码存储
          htpasswd命令进行管理
            htpasswd [options] passwdfile username 
              -c:自动创建passwdfile,仅在第一次添加用户时使用
              -m:md5加密用户密码
              -s:sha1加密用户密码
              -D:删除指定用户
         例:
            <Directory "/var/www/fang">
              Options Indexes
              AllowOverride None
              AuthType Basic
              AuthName "fang"
              AuthUserFile "/etc/httpd/conf/.htpasswd"
              Require valid-user
              AuthGroupFile "/etc/httpd/conf/.htgroup"
            </Directory>

虚拟主机
三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址
基于主机名:
为每个虚拟主机准备一个主机名
基于端口:
为每个虚拟主机准备至少一个专用端口,实践中很少使用
注意:中心主机不要和虚拟主机一起使用
方法:注释DocumentRoot

每个虚拟主机都有专用配置:
<VirtualHost "ip:port">
ServerName
DocumentRoot ""
</VirtualHost>
ServerAlias:虚拟主机的别名
Errorlog:错误日志
Accesslog:访问日志
<Directory "">
</Directory>
示例1:基于ip的虚拟主机
<VirtualHost 192.168.137.143:80>
ServerName web1.zeng.com
DocumentRoot "/vhost/web1/htdocs"
</VirtualHost>

<VirtualHost 192.168.137.129:80>
     ServerName web2.zeng.com
     DocumentRoot "/vhost/web2/htdocs"
</VirtualHost>

内置的status页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com
</Location>
界面中表示的意义:
“_”等待连接,“S”启动,“R”读取请求,
“W”发送回复,“K”Keepalive(已读),“D”DNS查找,
“C”关闭连接,“L”记录,“G”顺利完成,
“I”闲暇清理工人,“.” 打开没有当前进程的插槽
如果要显示更详细的信息,可以打开ExtendedStatus On这个选项.

apache的学习笔记

标签:apache的学习

原文地址:http://blog.51cto.com/12814448/2087412

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!