1.HTTP状态码:

  1xx: 信息性状态码
2xx:成功状态码 200OK 201CREATED
3xx:301 永久重定向 302 临时重定向,会在响应报文中使用location:新位置
4xx:客户端类错误
     403 请求被拒绝
     404 页面不存在
     405 使用的方法不被允许
5xx:服务器类错误
     500:服务器类错误
     502:服务器网管错误
     503:服务暂时不可用


2.HTTP MPM三种模式

prefork 中没有线程的概念,是多进程模型,一个进程处理一个连接;稳定;响应快。其缺点是在连接数比较大时就非常消耗内存。

worker 是多进程多线程模型,一个进程有多个线程,每个线程处理一个连接。与prefork相比,worker模式更节省系统的内存资源。不过,需要注意worker模式下的Apache与php等程序模块的兼容性。

event 是worker模式的变种,它把服务进程从连接中分离出来,在开启KeepAlive场合下相对worker模式能够承受的了更高的并发负载。event模式不能很好的支持https的访问(HTTP认证相关的问题)


3.HTTPD基础配置文件:

# grep "Section"/etc/httpd/conf/httpd.conf
全局配置段
### Section 1: Global Environment
主服务器的配置段
### Section 2: 'Main' server configuration
虚拟主机配置段,通常不会和主服务器一起使用
### Section 3: Virtual Hosts

持久连接
KeepAliveOff:使用持久连接{On|Off}
MaxKeepAliveRequests100:使用持久连接最大的连接数
KeepAliveTimeout15:使用持久连接的超时时间
 
MPM模块
<IfModule prefork.c> 
StartServers      8 #启动8个空闲进程
MinSpareServers   5 #最少空闲进程5个
MaxSpareServers  20 #最大空闲进程20个,不能小于空闲进程
ServerLimit     256 #对于MaxClient 最大启动的server
MaxClients      256 #同时允许处理多少个客户请求256
MaxRequestsPerChild 4000 #每个子进程最多允许处理4000个请求
</IfModule>
 
<IfModule worker.c>
StartServers        4 #启用多少个进程
MaxClients        300 #最大并发的请求
MinSpareThreads    25 #最小空闲进程25个
MaxSpareThreads    75 #最多空闲进程75个
ThreadsPerChild    25 #每个进程最多25个线程
MaxRequestsPerChild 0 #不限定每个线程处理多少个请求
</IfModule>
 
监听端口
Listen80
 
指定要装载的模块:DSO
LoadModuleauth_basic_module modules/mod_auth_basic.so
……
#httpd -D DUMP_MODULES :  查看装载了哪些模块
 
2.)主服务器的配置段
### Section 2: 'Main' server configuration
 
ServerAdmin root@localhost : 
 
主机名
ServerNamewww.explm.com:80
 
网站根目录
DocumentRoot“/var/www/html”
 
于Directory中可做的访问控制
OptionsIndexes FollowSymLinks
 
如果目录下面没有主页,会把目录下的所有文件以列表方式列出,并可以i提供下载
-Indexes
跟踪符号连接
 -FollowSymLinks
 
支持在每个页面下创建.htacces用户实现对比此目录中资源访问时的访问控制功能
AllowOverrideNone
 
日志功能:
ErrorLog"/path/to/error_log"
LogLevel{debug|info|notice|warn|error|crit|alert|emerg}
LogFormat
CustomLog"/path/to/access_log" LogFormat_Name
CustomLoglogs/access_log combined
%h:客户端地址
%l:远程登录名,通常为-
%u:认证时输入用户名,没有认证时为-
%t:服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s:响应状态码
%b:响应报文的长度,单位是字节
%{HEADER_NAME}i:记录指定首部对应的值


4.CGI脚本:

CGI脚本路径别名,默认在/var/www/cgi-bin/
CGI如何工作:使服务器提供动态页面,用户的请求先到达系统内核的工作区,由内核交由本地监听在WEB服务上的服务程序,WEB服务器的服务理解用户请求的是一种特殊脚本的请求,WEB服务器服务不会直接相应客户。而是通过用户请求的资源响应给CGI协议,交给CGI的程序解释器,解释器会到磁盘上载入所请求的脚本后,在本地执行。并且将直接结果返回给WEB服务器。

ScriptAlias/cgi-bin/ "/var/www/cgi-bin/" :通知WEB服务器/var/www/cgi-bin/目录下可以存放CGI脚本
var/www/cgi-bin
#!/bin/bash
cat << EOF
Content-Type: text/html
 
<pre>
<meta http-equiv="refresh"content="3";url="172.16.32.10/cgi-bin/test.sh" /> #动态刷新页面,3秒刷新一次
<h1> The host time is: $(date +%T)</h1>
<h2>The system load is: $(sar 1 1)</h1>
</pre>
 
EOF

# chmod +x test.sh

wKiom1Pspeqj3kCjAAGq6auwctY499.jpg

5.基于用户做访问控制:

如果想要给虚拟主机做访问控制,只需要写入要控制的路径就好
用户认证:基本认证,明文发送 Basic
                  摘要认证,加密后发送的 digest
使用虚拟用户,不是用户登录系统的帐号,仅用户访问某服务,或者获取某资源的认证
可以存放的位置:文本文件(密码是MD5).httppasswd,数据库,(dbm基于文本文件的数据库引擎,比文本的速递要快,API方式输出),ldap,轻量级访问协议
authenticationprovider: 帐号和密码的存储机制,简称authn
authorizationprovider:用户访问的路径
httpd中简称:authn

基于文件做访问控制:
<Directory "/var/www/cgi-bin">
    Optionsnone #用户访问时无任何选项
   AllowOverride AuthConfig #做认证相关的配置
    AuthTypeBasic #指明认证类型
    AuthName"system dmz!" #提示信息
#   AuthBasicProvider file
   AuthUserFile "/etc/httpd/conf/.htpasswd" #指定认证文件存放位置
#    Requireadmin
    Requirevalid-user #允许哪些用户登录 valid-user:所有合法的帐号 
</Directory>

创建htpasswd认证文件

Htpasswd命令:
选项: -c:  如果事先不存在,则创建,只能在第一次文件本月的时候使用
            -m:使用md5方式存储密码

            # htpasswd -c -m /etc/httpd/conf/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admin

# cat /etc/httpd/conf/.htpasswd 
admin:$apr1$BdPIYoGU$rklSzXdEDz3JVFKpawJ8G1

测试下:

wKiom1PspnyT18GeAAEygoMzBmo789.jpg

输入正确的密码后,就可以登录了


6.虚拟主机:

#DocumentRoot "/var/www/html"
<VirtualHost 172.16.32.10:80>
   ServerName www.zhang.com
   DocumentRoot "/var/www/web1"
</VirtualHost>


7.httpd内嵌处理器handler,输出status状态信息:

用到的hendler:server-status
启用handler使用SetHandler指令
handler:当文件被调图时,在apache内部的表示形式,一般文件类型都是隐式处理器
 
# vim /etc/httpd/conf/httpd.conf
<Location /server-status>
   SetHandler server-status
#    Orderdeny,allow
    Orderallow,deny
#    Denyfrom all
#    Allowfrom .example.com
    Allowfrom 172.16.0.0/16
</Location>
 
# httpd -t
Syntax OK
# service httpd reload
Reloading httpd:

wKiom1Psp1Gxgl9lAAPTQca5mp0619.jpg