HTTP:HypeText Transfer Protocol:超文本传输协议
URI:Uniform Resource Indentifier:统一资源标识符
状态代码:
1xx 纯信息
2xx 成功类的信息(200)
3xx 重定向类的信息(301,302,304)
4xx 客户端错误类的信息(404)
5xx 服务器端错误类的信息
web服务器的主要操作
1、建立连接-接受或拒绝客服端连接请求
2、接受请求-通过网络读取HTTP请求报文
3、处理请求-解析请求报文并做出相应的动作
4、访问资源-访问请求报文中相关的资源
5、构建响应-使用正确的首部生成HTTP响应报文
6、发送响应-向客户端发送生成的响应报文
7、记录日志-当已经完成的HTTP事物记录进日志文件
报文的第一行通常称作报文起始行,后面标签格式的内容称作首部域,每个首部域都有名称和值组成,中间用逗号分隔。响应报文通常还有一个称作Body的信息主体,即响应给客服端的内容
httpd:
web server,开源软件
事先创建进程
按需维护适当的进程
模块设计,核心比较小,各种功能都模块添加
支持运行配置,支持单独编译模块
支持多种方式的虚拟主机配置
socket:IP:Port
虚拟主机:
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议
支持用户认证
支持基于IP或主机名的ACL
支持每目录的访问控制
支持URL重写
httpd:
port(80/tcp),(ssl:443/tcp)
/etc/httpd 工作根目录,相当于程序安装目录
/etc/httpd/conf 配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/modules 模块目录
/etc/httpd/log -->/var/log/httpd 日志目录
日志文件有两类:访问日志access_log,错误日志:err_log
/var/www/
html 静态页面
cgi-bin 动态
cgi:common gateway interface通用网关接口
httpd安装
yum -y install httpd
MPM:mutil path modules
mpm_winnt
prefork(一个请求用一个进程响应)
worker(一个请求用一个线程响应,启动多个进程,每个进程生成多个线程)
event(一个进程处理多个请求)
/etc/httpd/httpd.conf
Options 选项
None:不支持任何选项
Indexes:允许索引目录
FollowSymLinks:允许访问符号连接指向的源文件
Includes:允许执行服务端包含(SSI)
SymLinksifOwnerMatch:
ExecCGI:允许执行CGI脚本
MultiViews:多功能视图
All:支持所有选项
AllowOverride:允许覆盖 #服务器访问列表
Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
Order allow,deny #除了allow之外的都deny
Allow from all
AllowOverride AuthConfig:用户认证访问机制
AuthType Basic 基本用户认证
AuthName "" 显示名字
AuthUserFile "/etc/httpd/conf/htpasswd" 用户的帐号密码文件
AuthGroupFile /etc/httpd/conf/htpgroup 组的文件
Require user username 只有这个用户才能访问
Require group
Require valid-user 所有的用户都可以访问
例如添加用户
AllowOverride AuthConfig
AuthType Basic
AuthName "身份验证"
AuthUserFile "/etc/httpd/conf/htpasswd"
Require valid-user
添加组
AuthGropuFile "/etc/httpd/conf/group"
vim /etc/httpd/conf/group
group:tom jerry
htpasswd -c -m /etc/httpd/conf/htpasswd
-c 第一次创建,之后再创建不需要加-c
-m 以MD5加密方式存放
DirectoryIndex:索引,默认访问页面
AccessFileName:一个目录的访问权限,一般要禁用
ErrorLog:错误日志
LogLevel:日志级别
LogFormat:日志格式
%h 客户端地址
%l 远程用户登录名称,大多数都是”-“
%u 登录网站时候的用户
%t 日志产生的时间
%r 请求报文第一行,“方法,资源,版本号”
%s 状态码
%b 响应报文的内容大小
%{Referer}i 你从哪个页面来
%{User-agent}i 浏览器类型
CustomLog:访问日志
Alias:路径别名
虚拟主机:
apache服务:服务于多个不同的站点
要使用虚拟主机,必须先注释中心主机的DocumentRoot
虚拟主机的定义
<VirtualHost HOST>
</VirtualHost>
基于IP的HOST写法
IP1:80
IP2:80
基于端口
IP:80
IP:8080
基于域名
*:80
ServerName不同
下例四种不同的虚拟主机及验证
[root@localhost conf.d]# vim Virtual.conf
NameVirtualHost 192.168.1.202:80
<VirtualHost 192.168.1.201:80>
ServerName a.com
DocumentRoot /www/a.com
CustomLog /var/log/a.com/access_log combined
ErrorLog /var/log/a.com/error.log
</VirtualHost>
<VirtualHost 192.168.1.202:80>
ServerName b.com
DocumentRoot /www/a.org
CustomLog /var/log/b.com/access_log combined
<Directory "/www/a.org/">
Options none
AllowOverride authconfig
AuthType basic
AuthName "Restrict area"
AuthUserFile "/www/htpasswd"
Require valid-user
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.202:80>
ServerName d.com
DocumentRoot /www/d.com
CustomLog /var/log/d.com/access_log combined
ErrorLog /var/log/d.com/error_log
<Directory "/www/d.com">
Options none
AllowOverride none
Order deny,allow
Deny from 192.168.1.102
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.201:8080>
ServerName c.com
DocumentRoot /www/c.com
</VirtualHost>
设定默认虚拟主机
<VirtualHost _default_:80>
DocumentRoot /www/default80
#...
</VirtualHost>
<Location /status> 定义URL,开放server-status
SetHandler server-status 执行一个动作
Order Deny,allow
Deny from all
Allow from .example.com
基于openssl的https服务配置
yum install mod_ssl
在证书CA服务器上
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/ca.key 2048)
vim /etc/pki/tls/openssl.cnf
openssl req -new -x509 -key private/ca.key -out cacert.pem -days 3655
mkdir certs newcerts crl
touch index.txt serial
echo 01 > serial
切换到客户端服务器上
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/ca.key 2048)
vim /etc/pki/tls/openssl.cnf
openssl req -new -x509 -key private/ca.key -out cacert.pem -days 3655
mkdir certs newcerts crl
touch index.txt serial
echo 01 > serial
openssl req -new -key server.key -out server.csr
然后把server.csr发给CA服务器上
切换CA服务器
openssl ca -keyfile ca.key -in server.csr -out server.pem
然后再把server.pem传给客户端服务器
切换客户端服务器
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/ca.key
service httpd restart